我正在尝试使用opencv中的折线函数在图像上绘制任意四边形.当我这样做时,我得到以下错误
OpenCV错误:折线中的断言失败(p.checkVector(2,CV_32S)> = 0),文件/tmp/buildd/ros-fuerte-opencv2-2.4.2-1precise-20130312-1306/modules/core/src/d rawing.cpp,2065行
我这样调用函数,
cv2.polylines(img, points, 1, (255,255,255))
Run Code Online (Sandbox Code Playgroud)
其中point为numpy数组,如下所示(图像大小为1280x960):
[[910 641]
[206 632]
[696 488]
[458 485]]
Run Code Online (Sandbox Code Playgroud)
而img只是一个我能够表达的正常形象.目前我只是在这些点之间画线,但我正在寻找更优雅的解决方案.
我该如何纠正这个错误?
我需要一个优先级队列来获取具有最高优先级值的项目.我目前正在使用Queue库中的PriorityQueue类.但是,此函数仅返回具有最低值的项目.我尝试了一些丑陋的解决方案,如(sys.maxint - priority)作为优先级,但只是想知道是否存在更优雅的解决方案.
我的图像有大约50到100个小轮廓.我希望实时找到每个轮廓的平均强度[1] [2].我能想到的一些方法是
为每个轮廓绘制带有FILLED选项的轮廓; 使用每个图像作为原始图像上的掩模,从而找到平均值.但我认为这种方法乍一看不是实时的.
drawContour使用FILLED选项研究OpenCV 函数的实现,并以相同的方式访问轮廓包围的像素.但代码看起来非常复杂,不容易理解.
计算最小面积矩形,使用变换找到矩形内的所有点,并找到非零点的平均值.再次,似乎是复杂的方法.
有没有更简单有效的方法来做到这一点?
[1]每个非重叠轮廓所包围的所有像素强度的平均值
[2]在2.66 Ghz台式PC上每秒约25,(960 x 480)像素图像