回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直在玩OpenCV(cv2)并检测线条和形状。比如说我女儿画了一幅画:</p>
<p><a href="https://i.stack.imgur.com/3jiNT.png" rel="noreferrer"><img src="https://i.stack.imgur.com/3jiNT.png" alt="enter image description here"/></a></p>
<p>我正在尝试编写一个Python脚本,该脚本将分析绘图并将其转换为硬线/形状,如:</p>
<p><a href="https://i.stack.imgur.com/5b0XP.png" rel="noreferrer"><img src="https://i.stack.imgur.com/5b0XP.png" alt="enter image description here"/></a></p>
<p>这就是说,我已经安装了opencv并尝试使用它,但是除了能够在图像中画出一条垂直线之外,我没有运气。下面是我目前为止的代码,任何关于如何使用opencv进行此操作的指针或建议都将非常感谢。</p>
<pre><code>import cv2
import numpy as np
class File(object):
def __init__(self, filename):
self.filename = filename
def open(self, filename=None, mode='r'):
if filename is None:
filename = self.filename
return cv2.imread(filename), open(filename, mode)
def save(self, image=None, filename_override=None):
filename = "output/" + self.filename.split('/')[-1]
if filename_override:
filename = "output/" + filename_override
return cv2.imwrite(filename, image)
class Image(object):
def __init__(self, image):
self.image = image
def grayscale(self):
return cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
def edges(self):
return cv2.Canny(self.image, 0, 255)
def lines(self):
lines = cv2.HoughLinesP(self.image, 1, np.pi/2, 6, None, 50, 10)
for line in lines[0]:
pt1 = (line[0],line[1])
pt2 = (line[2],line[3])
cv2.line(self.image, pt1, pt2, (0,0,255), 2)
if __name__ == '__main__':
File = File('images/a.png')
Image = Image(File.open()[0])
Image.image = Image.grayscale()
Image.lines()
File.save(Image.image)
</code></pre>
<p>不幸的是,对于一个简单的正方形图形,我得到的是:</p>
<p><a href="https://i.stack.imgur.com/p46aO.png" rel="noreferrer"><img src="https://i.stack.imgur.com/p46aO.png" alt="enter image description here"/></a></p>
<p>其中,框中的垂直线是代码的输出。</p>