Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
如何在opencv中使用撇渣等高线?_Opencv_Image Processing_Opencv Contour - Fatal编程技术网

如何在opencv中使用撇渣等高线?

如何在opencv中使用撇渣等高线?,opencv,image-processing,opencv-contour,Opencv,Image Processing,Opencv Contour,我使用撇渣法进行分水岭处理,因为它能提供更好的结果。但是一旦找到轮廓,使用opencv可以更容易地找到轮廓属性 我用它来寻找Skiliage流域的等高线: contours = measure.find_contours(watershed(-distance, markers, mask=th4), 0.8) 要绘制轮廓,我使用以下方法: cv2.drawContours(rimg6, [A.astype(np.int32)], -1, (0,255,0), 4) 由于skimage给出的

我使用撇渣法进行分水岭处理,因为它能提供更好的结果。但是一旦找到轮廓,使用opencv可以更容易地找到轮廓属性

我用它来寻找Skiliage流域的等高线:

contours = measure.find_contours(watershed(-distance, markers, mask=th4), 0.8)
要绘制轮廓,我使用以下方法:

cv2.drawContours(rimg6, [A.astype(np.int32)], -1, (0,255,0), 4)
由于skimage给出的是实数,而opencv仅适用于Intager,因此我使用它将轮廓转换为整数:

A = np.floor(contours[0])
A = A.astype(int)
等高线图与[A.astype(np.int32)]无关,当我使用A.astype(np.int32)(我的意思是没有括号)时,我会得到以下错误:

OpenCV(4.1.2) /io/opencv/modules/imgproc/src/drawing.cpp:2509: error: (-215:Assertion failed) npoints > 0 in function 'drawContours'

我该怎么办?

OpenCV等高线在每个点周围都有一组额外的括号(不知道为什么,总是这样)

这里有一个简短的演示脚本,展示了一种从skimage等高线转换为OpenCV等高线的方法

导入cv2
将numpy作为np导入
从脱脂进口措施
#创建空图像
空白=np.零((100100),np.uint8);
#------以下代码行取自此处-----------
# https://scikit-image.org/docs/dev/auto_examples/edges/plot_contours.html#sphx-glr自动示例边绘制轮廓py
#构造一些测试数据
x、 y=np.ogrid[-np.pi:np.pi:100j,-np.pi:np.pi:100j]
r=np.sin(np.exp((np.sin(x)**3+np.cos(y)**2)))
#以0.8的恒定值查找等高线
等高线=测量。查找等高线(r,0.8)
#------------代码复制结束--------------
#转换为opencv等高线并绘制
对于轮廓中的con:
cv_等高线=[];
对于con点:
intify=[int(点[0]),int(点[1]);
cv_等高线追加([intify])#额外的一对括号,因为“\_(ツ)_/“这是OpenCV
#转换为numpy并绘制
cv_轮廓=np.数组(cv_轮廓);
cv2.绘制轮廓(空白,[cv_轮廓.aType(int)],-1,(255),-1);
#变大
blank=cv2.调整大小(blank,(300300));
cv2.imshow(“空白”,空白);
cv2.waitKey(0);

很抱歉,看到它有点晚了。谢谢您的回答。