- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习使用 cv2.approxPolyDP 函数将 OpenCV 轮廓分割成更简单、更相关的曲线。我想为自己说明这一点,以便更好地理解正在发生的事情。我越来越接近了,cv2.approxPolyDP 函数(实现 RDP 算法)似乎在工作,但是绘制为轮廓时的输出似乎是一系列点而不是我预期的曲线。
随时贡献任何有用的东西。
这是我正在使用的 test-pattern.png 文件:
import numpy as np
import cv2, cv
#read the test image - this one happens to be binary
img = cv2.imread("test-pattern.png",0)
#invert the image
img2 = cv2.bitwise_not(img)
cv2.imshow("after bitwise not",img2)
#find the contours of the image
contour,hier = cv2.findContours(img,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)
#make a color image of the same size for displaying contours later on .... img3 and img4
height, width = img.shape # binary image is height, width; otherwise would be height, width, depth
img3 = np.zeros((height,width,3), np.uint8)
img4 = np.zeros((height,width,3), np.uint8)
#draw contours on the color image
cv2.drawContours(img3,contour[0],-1,(0,0,200),1)
cv2.imshow("contours",img3)
#print a bunch of stuff to the command line for diagnostic purposes
print "contour vector length: ", len(contour), "\n hier length: ", len(hier)
print "contour area: ", cv2.contourArea(contour[0])
print "canvas area: ", height*width
print "bounding rect: ", cv2.boundingRect(contour[0])
#get the RDP curve vector, and try to display it as a contour on img4
#I chose an epsilon value of 1.1 ... it can be tweaked later
#It will be best to draw these curves in a rainbow colorspace so I can see them
print "RDP curve:", cv2.approxPolyDP(contour[0], 1.1, 1)
print "RDP curve length: ", len(cv2.approxPolyDP(contour[0], 1.1, 1))
cv2.drawContours(img4,cv2.approxPolyDP(contour[0], 1.1, 1),-1,(0,90,200),1)
cv2.imshow("contours",img4)
cv2.waitKey(0)
这是最后一段代码生成的输出的裁剪片段。我裁剪它以便您可以看到点图案。我不习惯通过 OpenCV 使用曲线,但为了理解目的我想做的是在某种彩虹色空间中显示 RDP 算法 (cv2.approxPolyDP) 生成的曲线。这样我就可以看到所有单独的曲线都被连接起来形成轮廓。稍后我需要对这些曲线执行一些操作,因此将它们可视化可能非常有用。
我最初在自己绘制轮廓时注意到的另一件有趣的事情是,如果我使用 cv2.drawContours 传递所有轮廓 cv2.drawContours(img3,contour,-1,(0,0,200),1)
我对形状以及框架的外边框进行了实心追踪:
另一方面,如果我选择代表形状本身的轮廓(不是框架的外边界)cv2.drawContours(img3,contour[0],-1,(0,0,200),1 )
,我得到了更多的点状追踪作为输出:
我想我不完全了解 drawContours 函数在这里做了什么。
最佳答案
您得到虚线结果的原因是因为您向 drawContours
函数传递了不正确的数据类型。近似值是一个 numpy 数组,而函数需要一个列表。
这应该可以解决问题:
cv2.drawContours(img3,[contour[0]],-1,(0,0,200),1)
请注意,第二个参数现在是 [contour[0]]
关于python - 如何在 OpenCV 中绘制一组闭合的多边形曲线,将每个段表示为不同的颜色(即在彩虹色空间中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581782/
单击位于阴影根内部的元素时出现空指针异常(已关闭) 尝试用 Java 脚本处理它: public WebElement getShadowRootElement(WebElement element)
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 3 年前。 Improve th
我开始了解 Javascript 中的原型(prototype)设计和闭包,但还不完全是这样。下面的示例中,我的两个对象,第二个对象似乎失去了范围/上下文并接管了第一个对象的身份。 function
我有一个 Ionic 应用程序,我正在尝试从闭包内部返回数据。控制台正确显示所有内容,但我似乎无法正确返回数据。我尝试了几种不同的变体,但没有成功。 $scope.callbackMethod = f
我正在编写一个程序,能够识别面部的以下特征: 眼睛是睁着还是闭着 嘴巴是张开还是闭合(最好是张开程度) 脸部转向的方向(左、右或正面) 与其从头开始开发此功能(这所以不是我的领域),我希望能够使用第三
我有一个错误,我不明白,我有一个json,我做了一个接口,当我试图循环它时,我在我的html中得到了一个错误。。JSON格式对我来说相当复杂。。谢谢。。图片中的错误。杰森。接口。服务。Ts.file。
我是一名优秀的程序员,十分优秀!