Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python opencv锐利边界提取图像_Python_Numpy_Opencv_Image Processing - Fatal编程技术网

Python opencv锐利边界提取图像

Python opencv锐利边界提取图像,python,numpy,opencv,image-processing,Python,Numpy,Opencv,Image Processing,我能够提取两幅图像之间的差异(原始图像的边缘不锐化)。我试图做的是将图像转换为具有尖锐四边形边的图像(中间步骤到最终图像)。 我将Python2.7与cv2和numpy一起使用。我现在的主要问题是,我不知道如何编程来生成最终图像(所以如何切割未锐化的边缘并生成具有锐化边缘的最终图像) 请问,如何进行图像处理 原始图像 中间步骤 最终图像 其他图像: 首先,我们找到平滑轮廓,然后使用以下方法将其拉直为四边形: 在最后一条线之后,绘制初始树状图像的平滑轮廓。首先,我们找到平滑轮廓,然后使用以下方法将

我能够提取两幅图像之间的差异(原始图像的边缘不锐化)。我试图做的是将图像转换为具有尖锐四边形边的图像(中间步骤到最终图像)。 我将Python2.7与cv2和numpy一起使用。我现在的主要问题是,我不知道如何编程来生成最终图像(所以如何切割未锐化的边缘并生成具有锐化边缘的最终图像)

请问,如何进行图像处理

原始图像

中间步骤

最终图像

其他图像:

首先,我们找到平滑轮廓,然后使用以下方法将其拉直为四边形:


在最后一条线之后,绘制初始树状图像的平滑轮廓。

首先,我们找到平滑轮廓,然后使用以下方法将其拉直为四边形:


在最后一行之后,绘制最初树状图像的平滑轮廓。

在numpy.zeros数组上绘制一个白色填充多边形作为遮罩或roi,并使用它来遮暗图像。看到了,这可能会起作用,但我有很多图像,我正在进行差异检测,这些图像的位置和形状不同(它们有共同的四方,但这个四方可以在不同的图像上有不同的侧面)。通用示例将非常好。抱歉,我将不得不把它留给其他人,因为我不精通OpenCV。如果知道多边形以便在图像上绘制它,则可以在黑色背景图像上绘制它以用作遮罩。如果您不知道多边形,那么您可以设置阈值,进行形态学腐蚀,找到轮廓,然后为其计算一些N边多边形。OpenCV有一种将多边形拟合到某个形状的方法。请参见cv2.approxPolyDP在numpy.zeros数组上绘制一个白色填充多边形作为遮罩或roi,并使用它来遮暗图像。看到了,这可能会起作用,但我有很多图像,我正在进行差异检测,这些图像的位置和形状不同(它们有共同的四方,但这个四方可以在不同的图像上有不同的侧面)。通用示例将非常好。抱歉,我将不得不把它留给其他人,因为我不精通OpenCV。如果知道多边形以便在图像上绘制它,则可以在黑色背景图像上绘制它以用作遮罩。如果您不知道多边形,那么您可以设置阈值,进行形态学腐蚀,找到轮廓,然后为其计算一些N边多边形。OpenCV有一种将多边形拟合到某个形状的方法。请参见cv2.approxPolyDP,谢谢,我应该如何将其用于我添加的图像?(请参阅原始文本中的其他图像)在这些图像中,它无法正常工作。这是一个完全不同的问题,因为在原始图像中,感兴趣的区域已被遮罩。在新的图像中,您首先必须提取感兴趣的区域,然后可以如上所述进行操作。提取是困难的,因为颜色和颜色(亮度)都不能单独描述这个区域。我在这里发布了关于我试图实现的目标的单独问题。如果你有任何想法,请检查一下?万分感谢!谢谢,请问我应该如何使用它的图像我添加?(请参阅原始文本中的其他图像)在这些图像中,它无法正常工作。这是一个完全不同的问题,因为在原始图像中,感兴趣的区域已被遮罩。在新的图像中,您首先必须提取感兴趣的区域,然后可以如上所述进行操作。提取是困难的,因为颜色和颜色(亮度)都不能单独描述这个区域。我在这里发布了关于我试图实现的目标的单独问题。如果你有任何想法,请检查一下?万分感谢!
import cv2
import numpy as np

img = cv2.imread(r'c:\TEMP\so57564249.jpg')

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold and shrink mask
_, thresh = cv2.threshold(img_gray, 10, 255, cv2.THRESH_BINARY)
thresh = cv2.erode(thresh, np.ones((10,10), np.uint8), iterations=1)

# find countour
contours,_ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnt = contours[0]

# straighten contour to quadrilateral
epsilon = 0.001*cv2.arcLength(cnt,True)
while True:
   epsilon += epsilon
   approx = cv2.approxPolyDP(cnt,epsilon,True)
   if len(approx) <= 4:
       break

# output
thresh[:,:] = 0
thresh = cv2.fillPoly(thresh, [approx], 255)
img = cv2.bitwise_and(img, img, mask=thresh)
cv2.polylines(img, [approx], True, (0,255,0), 2)
cv2.polylines(img, [cnt], True, (0,0,255))