opencv-python如何找到最大的轮廓并提取该轮廓对应的mask部分以及opencv常见的问题

opencv-python如何找到最大的轮廓并提取该轮廓对应的mask部分以及opencv常见的问题

一、如何找到最大的轮廓并提取该轮廓对应的mask部分
主要用到的函数:cv.threshold() cv.findContours() cv.drawContours()
首先要讲的是这三个函数的输入图像,这里很重要也很麻烦。
1.cv.threshold()函数输入的图像数据可以是单通道也可以是三通道,输出通道数和输入通道数是一致的。但是由于cv.findContours()函数的输入是单通道的,因此我们通常以单通道的形式输入。
2.cv.findContours()的输入是单通道的,且需要是2值图像。
3. cv.drawContours()函数将我们指定的轮廓画在我们要画的图片上,这里的输入图片是三通道的,因为函数的颜色添加形式是RGB形式。
4.提取过程:


_,Thresh_val  = cv.threshold(maskcop,val1-1,1,cv.THRESH_BINARY)

contours, _ = cv.findContours(maskcop, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_NONE)

background = np.zeros_like(mask)

biggest_contour_mask = cv.drawContours(background, contours, 1, (255, 255, 255), -1)

biggest_contour_mask = cv.cvtColor(biggest_contour_mask, cv.COLOR_RGB2GRAY)

实际效果图(我们获取两个轮廓中的一个):

opencv-python如何找到最大的轮廓并提取该轮廓对应的mask部分以及opencv常见的问题
opencv-python如何找到最大的轮廓并提取该轮廓对应的mask部分以及opencv常见的问题

二、opencv常见的问题
平时常见的问题:
1.数据类型不匹配的问题。 我们使用numpy构建一个伪图片时数据格式可能是np.float64,但是cv很多函数使用的数据类型都是np.float32或者np.uint8。因此我们遇到问题时先考虑是不是数据格式的问题,使用image.astype(np.uint8)即可修改图片的数据格式
2.通道问题,就像上面提取轮廓一样。cv中三个函数的输入数据通道数不一致,我们需要注意通道数的问题。

Original: https://blog.csdn.net/weixin_44587732/article/details/124431659
Author: 向前 向前 向前!
Title: opencv-python如何找到最大的轮廓并提取该轮廓对应的mask部分以及opencv常见的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/701961/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球