繁体   English   中英

如何将图像上的对象轮廓绘制到单独的图像

[英]how to draw outlines of objects on an image to a separate image

我正在研究一个拼图,我的最后任务是识别拼图的边缘类型。

在此处输入图片说明

如上图所示,我可以旋转并裁剪出相同角度的块的每个边缘。 我的下一步是将边缘线分成单独的图像,如下图所示

在此处输入图片说明

然后用一种颜色填充线条的一侧,然后尝试对其进行处理,以确定其是哪种类型的边缘。

我暂时没有找到将边缘线与图像分开的正确方法。

我的方法::一种方法是逐像素扫描并找到黑色像素,旁边有一个修女黑色像素。 这是我可以实现的代码。 但感觉像是一种原始且费时的方法。

因此,如果有的话,您可以提供任何帮助或想法,或者以任何完全不同的方式来检测凹陷和隆起。

提前致谢..

首先将彩色图像转换为灰度图像。 然后应用一个阈值,例如零,以获得二进制图像。 如果有孔,您可能必须使用形态学运算来进一步处理二进制图像。 然后找到该图像的轮廓并将其绘制为新图像。

RGB

二进制

续

下面给出了一个简单的代码,在python 2.7使用opencv 4.0.1

bgr = cv2.imread('puzzle.png')
gray = cv2.cvtColor(bgr, cv2.COLOR_BGR2GRAY)
_, roi = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY)
cv2.imwrite('/home/dhanushka/stack/roi.png', roi)
cont = cv2.findContours(roi, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
output = np.zeros(gray.shape, dtype=np.uint8)
cv2.drawContours(output, cont[0], -1, (255, 255, 255))

# removing boundary
boundary = 255*np.ones(gray.shape, dtype=np.uint8)
boundary[1:boundary.shape[0]-1, 1:boundary.shape[1]-1] = 0

toremove = output & boundary
output = output ^ toremove

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM