如何用openCV选中图片中一个已经圈出的区域
opencv吧
全部回复
仅看楼主
level 2
ColdNMore 楼主
大牛们,我是一个初学opencv的新人,想要问下,我已经在用PS在图片中圈出一块区域,比如我用的是255全红的边框,我如何在openCV程序里选中这块区域,以便进行计算面积等操作。
求教求教
2018年04月05日 06点04分 1
level 2
ColdNMore 楼主
2018年04月05日 07点04分 2
level 9
首先计算得到区域边界的顶点,然后就容易了可以调用opencv中的函数
2018年04月07日 08点04分 3
是不是可以通过遍历像素找到顶点,然后调用什么函数呀?
2018年04月07日 13点04分
level 6
用findcontours找到轮廓。遍历判断哪个轮廓的值是红色的。用countarea计算面积
2018年04月08日 16点04分 4
[泪]感动,谢谢大佬,我去尝试尝试
2018年04月09日 05点04分
level 2
ColdNMore 楼主
仔细研究了一下,findcontours函数需要输入的图像为二值图,这样就不存在判断轮廓值是红色。
我用了canny来得到二值图,然后检测到了很多干扰的轮廓,有些是特别小的点,而且我自己用红色圈出的区域,轮廓有两重。
很难受的是,findcontours函数,不知道为何,运行程序一到这就异常中断报错,网上找了很多也没有好的解决方法。只能改用IplImage和cvFindContours,比较难受。
最后关键问题,如果我用找到轮廓点的坐标,代入原图去判断颜色是否为红色,有效果吗?
以上,求大佬解惑[泪]
2018年04月09日 15点04分 5
...你直接用颜色识别去把红框筛选出来
2018年04月10日 00点04分
level 1
老哥,你最后解决了吗,怎么选出已经框出的区域呢
2018年04月17日 13点04分 6
图片情况可能都不同,我后来是用了canny检测,直接输入的原图,调大阈值
2018年06月26日 08点06分
level 1
相信你的图片中没有别的像素是(rgb)255.0.0,所以找到所有有这个特征的点,再做几次滤波,然后就差不多了
2018年04月24日 00点04分 7
level 3
根据你的描述,我画了个简单的图片,然后用Python计算图中红色矩形框像素面积(以下代码):
#coding:utf-8
import cv2
"""
使用的是python2.7+ Opencv3.3,已经自己跑过一遍,可以运行
"""
#读入该彩色图像
img = cv2.imread('d:/python27_work/images/redSquare.png')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #转换为灰度图像
#图像进行阈值化,阈值参数可根据自己的图像调整
ret, thresh = cv2.threshold(img_gray,150,190, 0)
#进行轮廓检测
ret, contours, hier=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
print(len(contours)) #检查一下检测到的轮廓个数
#上述轮廓检测函数返回的轮廓集是缺省的,如果是个矩形只返回四个角点,可根据这个特点寻找目标矩形区域(这么找不严谨,任意四边形的轮廓近似点集也只有4个点)
cnt= [] #创建一个空的轮廓集合
for i in range(len(contours)):
if len(contours[i]) == 4:
cnt.append(contours[i])
#现在有在图中轮廓近似集合啦 cnt,我这个图较简单,到这一步就只有两个轮廓了,一个是图像的边缘矩形,一个就是所要找的轮廓。在通过cv2.contourAera()函数算出矩形轮廓像素面积即可.
#这里要找的轮廓是cnt中第二个
area = cv2.contourArea(cnt[1]) #area既是矩形框像素面积。
print(area)
2018年04月26日 15点04分 9
谢谢大佬,后来忙着忙着忘记看帖子了,已搞定[吐舌]
2018年06月26日 08点06分
@ColdNMore 你上传一下代码吗? 老哥
2018年10月19日 08点10分
1