获取轮廓内图像

opencv论坛和一些博客上看到的方法:

cvFindContours 获取轮廓后用 cvDrawContours 来画,

要画出或复制区域内的内容,可以使用如下代码:
cvDrawContours(mask, contour, cvScalarAll(255), cvScalarAll(255), 0, -1);
cvCopy(src, dst, mask);
该代码的意思是把提取到的轮廓的边界以及内区域都画到一个 mask 上,然后再通过 cvCopy 将该区域内的图像内容复制到 dst 中。
其中,cvDrawContours 的第 6 个参数是 int thickness CV_DEFAULT(1),即边界线的厚度,默认为 1,这里设置为 -1,是指对轮廓内的区域进行填充。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取轮廓内的所有像素,可以按照以下步骤进行操作: 1. 使用OpenCV的函数,比如`cv2.findContours()`,来查找图像中的所有轮廓。该函数返回一个包含所有轮廓的列表。 2. 遍历列表中的每个轮廓。对于每个轮廓,使用`cv2.drawContours()`函数在一个空白图像上绘制该轮廓。 3. 创建一个与原始图像大小相同的空白图像,作为结果图像。 4. 对于新绘制轮廓图像,遍历图像的每个像素。对于每个像素,判断它是否属于轮廓内部。 5. 如果某个像素在轮廓内部,将其像素值赋值给结果图像相应位置的像素。 6. 完成遍历后,结果图像即包含了轮廓内的所有像素。 下面是一个示例代码,使用这个方法获取图像内的轮廓像素: ```python import cv2 import numpy as np # 加载图像 image = cv2.imread('image.jpg') # 将图像转换为灰度图 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 进行二值化处理 _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 寻找轮廓 contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 创建空白图像作为结果 result = np.zeros_like(image) # 遍历每个轮廓 for contour in contours: # 绘制轮廓 cv2.drawContours(result, [contour], -1, (255, 255, 255), cv2.FILLED) # 遍历结果图像的每个像素 for y in range(result.shape[0]): for x in range(result.shape[1]): # 判断像素是否在轮廓内 if result[y, x] == [255, 255, 255]: # 将轮廓内的像素赋值给结果图像 result[y, x] = image[y, x] # 显示结果图像 cv2.imshow("Result", result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这样,`result`即是包含了轮廓内所有像素的图像
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值