如何在opencv 2.4.11 python中调整轮廓大小? (目标:对象提取)
发布时间:2020-12-20 13:51:29 所属栏目:Python 来源:网络整理
导读:我是opencv的新手,所以请原谅我的无知…… 基本上:我的形象中有一个感兴趣的对象.我想提取它. 我的问题来自缩小原始图像以便于处理.我在较小的图像上找到了对象的轮廓.我真正想做的是使用有关该轮廓的信息从原始全尺寸图像中提取对象. 我真的只想到两种方法
我是opencv的新手,所以请原谅我的无知……
基本上:我的形象中有一个感兴趣的对象.我想提取它. 我的问题来自缩小原始图像以便于处理.我在较小的图像上找到了对象的轮廓.我真正想做的是使用有关该轮廓的信息从原始全尺寸图像中提取对象. 我真的只想到两种方法来做到这一点,但我不知道哪些方法在opencv中实际上有意义: >调整轮廓大小.然后在原始图像上绘制它. 我正在使用2号,但我认为面具有问题.调整大小后,它不再包含轮廓. 以下是我当前代码的重要部分: image = cv2.imread(path) orig = image.copy() ... #resize the image image = cv2.resize(image,dim,interpolation = cv2.INTER_AREA) .... #convert to gray scale ... #get contour (cnts,_) = cv2.findContours(edged.copy(),cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) ... screenCnt = cv2.approxPolyDP(c,0.01 * peri,True) #<--the contour ... #create the mask mask = np.ones(image.shape,np.uint8)*255 cv2.drawContours(mask,[screenCnt],(0,0),-1) cv2.imshow("Small mask",mask) #<--- looks good print(mask.shape) #<---returns a 3 element tuple cv2.waitKey(0) #now resize the mask mask_big = cv2.resize(mask,fx=ratio,fy=300) cv2.imshow("Big mask",mask_big) #<--- ends up big,but all white (no contour) cv2.waitKey(0) 我一直在没有运气的情况下搜索互联网,但我想我在这里缺少一些基本的东西. 解决方法
我认为这是一个很老的问题.但是,我有同样的一个,并且无法通过代码示例找到快速答案.这是一个例子(对于opencv 3.4)
_,contours,_ = cv2.findContours(mask.astype(np.uint8),cv2.CHAIN_APPROX_NONE) coef_y = img_orig.shape[0] / img_resized.shape[0] coef_x = img_orig.shape[1] / img_resized.shape[1] for contour in contours: contour[:,:,0] = contour[:,0] * coef_x contour[:,1] = contour[:,1] * coef_y cv2.drawContours(img_orig,contour,-1,255,2) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |