opencv用boundingrect找最大区域时崩溃 40C

代码的功能是调用摄像头,然后找出视频帧中的红色区域,再找到其中最大的区域作为ROI。

用笔记本集成的摄像头的时候可以正常跑。

换成usb外接摄像头,编译连接都没问题,就是run的时候崩溃了

//#include "stdafx.h"

#include "opencv2/opencv.hpp"

#include

#include
using namespace std;
using namespace cv;

//漫水填充
void fillHole(const Mat srcBw, Mat &dstBw)
{
Size m_Size = srcBw.size();
Mat Temp = Mat::zeros(m_Size.height + 2, m_Size.width + 2, srcBw.type());//延展图像
srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));

cv::floodFill(Temp, Point(0, 0), Scalar(255,255,255));
//cv::floodFill(Temp, Point(30, 29), Scalar(255, 0, 0), 0, Scalar(10, 10, 10), Scalar(10, 10, 10));
Mat cutImg;//裁剪延展的图像
Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);

dstBw = srcBw | (~cutImg);

}

int main(int argc, char** argv)
{
//定义扫描图像的循环变量
int i = 0;
int j = 0;

//通过摄像头采集视频

VideoCapture capture(0);



//读取视频.
//VideoCapture capture("E:/weixian.mp4");
//视频总帧数
//long totalFrameNumber = capture.get(CV_CAP_PROP_FRAME_COUNT);
//num是一个计数的flag.
int num = 1;


while (1)
//while (num <= totalFrameNumber)
{
    //IplImage* frame;
    Mat frame1, frame;
    //将捕获图像存入frame变量
    capture >> frame1;




    blur(frame1, frame1, Size(7, 7));


    //缩放倍数
    double fScale = 0.5;
    //目标图像尺寸
    CvSize czSize;
    czSize.width = frame1.cols*fScale;
    czSize.height = frame1.rows*fScale;
    cv::resize(frame1, frame, cv::Size(czSize.width, czSize.height), (0, 0), (0, 0), cv::INTER_LINEAR);
    cv::Mat rgbImage = frame, hsvImage;
    //转换到hsv空间
    cv::cvtColor(rgbImage, hsvImage, cv::COLOR_BGR2HSV);
    //为了获取图像的尺寸
    //这里把图像类型转换
    IplImage* tempImage = &IplImage(hsvImage);
    IplImage* extractionImage = &IplImage(hsvImage);
    IplImage* reversionImage = &IplImage(hsvImage);
    IplImage* grayImage = &IplImage(hsvImage);
    IplImage* binaryImage = &IplImage(hsvImage);
    //显示两个空间下的图像
    imshow("RGB", rgbImage);
    //imshow("HSV", hsvImage);
    for (i = 0; i < tempImage->height; i++)
    {
        for (j = 0; j < tempImage->width; j++)
        {
            //获取像素点为(j, i)点的HSV的值
            CvScalar s_hsv = cvGet2D(tempImage, i, j);
            /*
            opencv 的H范围是0~180,红色的H范围大概是(0~8)∪(160,180)
            S是饱和度,一般是大于一个值,S过低就是灰色(参考值S>80),
            V是亮度,过低就是黑色,过高就是白色(参考值220>V>50)。
            */
            CvScalar s;
            if (!(((s_hsv.val[0]>0) && (s_hsv.val[0]<8)) || (s_hsv.val[0]>178) && (s_hsv.val[0]<180)))
            {
                s.val[0] = 0;
                s.val[1] = 0;
                s.val[2] = 0;
                cvSet2D(tempImage, i, j, s);
            }

            //else这小段是自己加的,如果是红色,就置为白色.
            else
            {
                s.val[0] = 180;
                s.val[1] = 30;
                s.val[2] = 255;
                cvSet2D(tempImage, i, j, s);
            }
        }
    }
    //提取红色分量
    cvConvert(tempImage, extractionImage);
    //cvNamedWindow("Extraction");
    //cvShowImage("Extraction", extractionImage);
    //颜色空间变换回RGB
    cvCvtColor(extractionImage, reversionImage, cv::COLOR_HSV2BGR);
    //cvNamedWindow("Reversion");
    //cvShowImage("Reversion", reversionImage);
    //这里如果转灰度,会出现内存泄漏.
    //由于前边定义每个图像都用的取址运算符
    //因为grayImge指向的是hsvImage的地址,而后者一直在变
    //所以此处gray也一直在变
    //RGB图像转灰度图
    //cvCvtColor(reversionImage, grayImage, cv::COLOR_BGR2GRAY);
    //cvNamedWindow("Gray");
    //cvShowImage("Gray", grayImage);
    //灰度图转二值图
    cvThreshold(grayImage, binaryImage, 100, 255, CV_THRESH_BINARY);
    //cvThreshold(reversionImage, binaryImage, 150, 255, CV_THRESH_BINARY);
    //cvNamedWindow("Binary");
    //cvShowImage("Binary", binaryImage);
    //5*5正方形,8位uchar型,全1结构元素
    cv::Mat element5(5, 5, CV_8U, cv::Scalar(1));  
    cv::Mat closed,opened,temp,final,cimage;
    //cv::vector<vector<cv::Point>> contours(10000);
    temp = Mat(binaryImage);
    //高级形态学运算函数
    cv::morphologyEx(temp, opened, cv::MORPH_CLOSE, element5);
    cv::morphologyEx(temp, closed, cv::MORPH_CLOSE, element5);
    //cvNamedWindow("Opened");
    //imshow("Opened", opened);
    //cvNamedWindow("Closed");
    //imshow("Closed", closed);
    fillHole(closed, final);
    cvNamedWindow("Final");
    imshow("Final", final);
    Canny(final, cimage, 150, 250);
    //cvNamedWindow("Canny");
    //imshow("Canny", cimage);


    cv::vector<vector<cv::Point>> contours;
    vector<Vec4i> hierarchy;

    cv::findContours(cimage, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE,Point());
    //cv::findContours(cimage, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());







    // 寻找最大连通域

    double maxArea = 0;
    vector<cv::Point> maxContour;
    for (size_t i = 0; i < contours.size(); i++)
    {
        double area = cv::contourArea(contours[i]);
        if (area > maxArea)
        {
            maxArea = area;
            maxContour = contours[i];
        }

        //cout << maxArea << endl;
    }
    //cout << maxArea << endl;
    //cout << contours.size() << endl;
    //cout << i << endl;

    //cout << maxContour << endl;


    // 将轮廓转为矩形框

    cv::Rect maxRect = cv::boundingRect(maxContour);



    // 显示连通域
    cv::Mat result1, result2;
    final.copyTo(result1);
    final.copyTo(result2);

    for (size_t i = 0; i < contours.size(); i++)
    {
        cv::Rect r = cv::boundingRect(contours[i]);
        cv::rectangle(result1, r, cv::Scalar(255));
    }
    //cv::imshow("all regions", result1);
    //cv::waitKey();
    cv::rectangle(result2, maxRect, cv::Scalar(0, 255, 0), 3);
    cv::imshow("largest region", result2);
    if (maxArea>8000)
    {
        cv::imshow("largest region", result2);
    }



    /*




    */



    waitKey(20);


    //视频帧数加1.
    num = num + 1;
}
return 0;

}


图片说明

图片说明

好像是boundingrect那里出错了,但是为什么集成摄像头就可以呢?请教各位

0

2个回答

0
cxz1988
cxz1988 您好!请问这个问题原因是什么呢?您有解决方案吗
9 个月之前 回复

从报错来看,无非就是vector出了问题或者输入的点集的位数不对。(好像是要求32位的)
你可以转换一下

 Mat conMat(contours[i].size(), 2, CV_32FC1);
for(int i = 0; i < contours[i].size(); i ++)
{
     conMat.at<float>(i, 0) = contours[i].x;
     conMat.at<float>(i, 1) = contours[i].y;
}    
cv::Rect maxRect = cv::boundingRect(conMat);
0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
opencv3返回外部矩形边界-boundingRect函数
#include #include #include using namespace cv; using namespace std; int main() { Mat srcImage(Size(600, 600), CV_8UC3, Scalar(0)); RNG &rng = theRNG(); char key; while (1) { //随机生成一些点 //首
学习OpenCV——Max_Area寻找最大区域
[cpp] view plaincopyprint? a. 二值化   b. 得到轮廓的个数   c. 将面积小于100的轮廓删除   d. 将宽、高 比例小于1的轮廓删除   e. 把面积最大的轮廓用红色框框画出来   [cpp] view plaincopyprint?     [cpp] 
OpenCV图像中寻找最大区域Max_Area
a. 二值化  b. 得到轮廓的个数  c. 将面积小于100的轮廓删除  d. 将宽、高 比例小于1的轮廓删除  e. 把面积最大的轮廓用红色框框画出来 #include "stdafx.h" #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* src;
使用OpenCV查找二值图中最大连通区域
上一篇博文中介绍了matlab查找最大连通区域的方法,OpenCV函数中也有类似
opencv-寻找图像最清晰区域
应朋友一个小小的需求,需要在一幅图像中找出最清晰的一个区域,由于我毕设课题刚好试自动对焦这一块 所以这个对我来说,可以用opencv简单的实现一下。 所谓最清晰的区域,也就是用图像评价函数所得的值最大的感兴趣区域。 这里有两种区分: 1.指定感兴趣区域大小,然后在原图像不断的滑动,获取对焦评价值。将rect 和对焦评价值value 存储在一个哈希表中,然后寻找哈希表val...
OPENCV ERROR boundingRect 崩溃
[img=https://img-bbs.csdn.net/upload/201609/07/1473229528_591575.png][/img]rnrn编译可以通过,单运行到rnRect maxRect = boundingRect(maxContour);rn这条语句时就崩溃了rnrn[code=c]#include "stdafx.h"rn#include rn#include rn#include rn//#include rn//#include rnrnusing namespace cv;rnrnvoid main()rnrn Mat frame;rn Mat frameAfterFliter;rn // 可从摄像头输入视频流或直接播放视频文件rn //cv::VideoCapture capture(0);rn Mat binFrame;rn Mat foreGround;rn Mat backGround;rn Mat binForeGround;rn rn Mat imgReverse(Mat src);rn rnrn rnrnrn BackgroundSubtractorMOG2 mog; //初始化GMMrnrn vector maxContour; //最大轮廓容器rnrn vector> foreGroundContour; //初始化轮廓点集存放容器rnrn VideoCapture capture("F:\\MyProject\\tennisTest3\\1.mp4");rn double fps;rn char string[10]; // 用于存放帧率的字符串rn //namedWindow("Camera FPS");rn double t = 0;rn long frameToStart = 1;rnrn for(int i = frameToStart; i < capture.get(CV_CAP_PROP_FRAME_COUNT); i++ )rn rn t = (double)getTickCount();rn if (waitKey(50) == 30) break; rn if (capture.isOpened())rn rn capture >> frame;rnrn GaussianBlur(frame, frameAfterFliter, Size(3,3), 0,0);rnrn //bilateralFilter(frame, frameAfterFliter, 25, 25*2, 25/2);rn // getTickcount函数:返回从操作系统启动到当前所经过的毫秒数rn // getTickFrequency函数:返回每秒的计时周期数rn // t为该处代码执行所耗的时间,单位为秒,fps为其倒数rnrn //cvtColor(frameAfterFliter, binFrame, CV_BGR2GRAY);rnrn mog(frameAfterFliter, foreGround, 0.001);rnrn mog.getBackgroundImage(backGround); rnrn threshold(foreGround, binForeGround, 128.0, 255.0, CV_THRESH_BINARY_INV | CV_THRESH_OTSU); //前景图像二值化rnrn Mat element = getStructuringElement(MORPH_RECT, Size(3,3));rnrn morphologyEx(binForeGround, binForeGround, MORPH_OPEN, element);//开运算,去除比结构元素小的点 rn rn imshow(" ", binForeGround); rn rn //imgReverse(binForeGround);rnrn rn findContours(binForeGround,foreGroundContour, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);//寻找图形轮廓rn rn double maxArea = 0;rn for(size_t i = 0; i < foreGroundContour.size(); i++) rn rn double area = contourArea(foreGroundContour[i]); rn if (area > maxArea) rn rn maxArea = area; rn maxContour = foreGroundContour[i]; rn rn rnrn Rect maxRect = boundingRect(maxContour);rnrn //Mat largestRegion;rnrn //frame.copyTo(largestRegion);rnrn //rectangle(largestRegion, maxRect, Scalar(255));rnrnrn //t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();rn //fps = 1.0 / t;rnrnrn //sprintf(string, "%.2f", fps); // 帧率保留两位小数rn //std::string fpsString("FPS:");rn //fpsString += string; // 在"FPS:"后加入帧率数值字符串rn //// 将帧率信息写在输出帧上rn //putText(largestRegion, // 图像矩阵rn // fpsString, // string型文字内容rn // cv::Point(5, 20), // 文字坐标,以左下角为原点rn // cv::FONT_HERSHEY_SIMPLEX, // 字体类型rn // 0.5, // 字体大小rn // cv::Scalar(255, 0, 255)); // 字体颜色rnrnrn //cv::imshow("Camera FPS", largestRegion);rn rn elsern rn std::cout << "No Camera Input!" << std::endl;rn break;rn rn rnrn rn[/code]
boundingRect 输入点返回最小矩形
1、boundingRect函数 函数作用: 计算轮廓的垂直边界最小矩形,矩形是与图像上下边界平行的 2、boundingRect函数调用形式 C++: Rect boundingRect(InputArray points) points 二维点集,点的序列或向量 (Mat)
OpenCV学习六:findContours、drawContours、仿射变换(warpAffine)、RotatedRect区域矫正及获取
函数说明 1. void findContours 1.1 概述 void findContours//提取轮廓,用于提取图像的轮廓 ( InputOutputArray image,//输入图像,必须是8位单通道图像,并且应该转化成二值的 OutputArrayOfArrays contours,//检测到的轮廓,每个轮廓被表示成一个point向量 OutputArray hierarc...
opencv 获取图像最大连通域 c++和python版
前言 之前在印象笔记中写过一个python+opencv版的最大连通域标记的程序,当时使用的是opencv2版本中的findContours函数作为载体,由于没有在意findContours中的各个contours之间的hierarchy关系,后来在一次实验中发现这种方式是有不足之处的,最方便的还是使用连通域标记算法将图像标记为各个连通域,然后在取连通域最大的区域这种方法。 错误的版本 ...
用OpenCv找出最大连通域,并对其进行连通域进行ROI
用OpenCv找出最大连通域,并对其进行连通域进行ROI (2011-08-21 21:53:33) 转载▼ 标签: 连通域 标定 opencv it 分类:OpenCV   由于项目需要,要对图像中的最大连通域进行标定,并且存储。首先需要使用cvFindCountour对边缘进行标定,其实它的原理就是连通域的边缘提取;其次就是对连
创建包围轮廓的矩形和圆形边界框--boundingRect()、minEnclosingCircle()和approxPolyDP()
boundingRect() 作用:计算点集的右上边框。 形式:boundingRect(InputArray points); 参数:points:输入二维点集,并用std::vector or Mat存储; minEnclosingCircle() 作用:找到包围二维点集面积最小的圆。 形式:void minEnclosingCircle(InputArray poin
OpenCV学习笔记——寻找连通域的几何中心(不规则图形也适用),及筛选最大连通域中心
参考https://blog.csdn.net/qq_34914551/article/details/78916084 Opencv寻找连通域的几何中心 #include &amp;quot;stdafx.h&amp;quot; #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;opencv2/opencv.hpp&amp;amp;gt; using namespace cv; using namespace std...
使用opencv的contours,结果发现vector原因不明的越界
好久不用opencv,重新开始使用opencv,第一次写的程序就遇到了bug。 #include <opencv2/opencv.hpp> #include <opencv/cv.h> #include <opencv/highgui.h> #include <opencv2/nonfree/nonfree.hpp> #include <opencv2/legacy/legacy.hpp> #def
获取最大轮廓 opencv
http://blog.csdn.net/davebobo/article/details/52583167#include<iostream> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include<imgproc/imgproc.hpp> using name
关于求最大联通域的OpenCV方法
最近一直在实验室编写关于室内独居老人异常行为检测的代码。感觉有点吃力,在网上找了一些代码,然后看到了一个关于求最大连通域的代码,感觉不错,现在在这里讲解一下这个方法涉及到的函数, cvFindContours     该函数的作用是Finds contours in a binary image也就是在一个二值图像中查找连通域,contour(轮廓;外形;(地图上表示相同海拔各点的)等高线
OpenCV中findContours函数的使用
从二值图像中找出对象的轮廓: OpenCV中函数findContours()用于中对象的轮廓,有两种形式: 第一种: void findContours( InputOutputArray image, OutputArrayOfArrays contours,                               int mode, int method, Point offset
有关minAreaRect的坑
有一些帖子只是详细介绍一下,并没有说其中的坑,minAreaRect的坑就是角度,我发现老外讨论如下:From http://stackoverflow.com/questions/24073127/opencvs-rotatedrect-angle-does-not-provide-enough-information, I think this can be solved this way:@...
boundingRect()函数的使用方法
Calculates the up-right bounding rectangle of a point set. C++: Rect boundingRect(InputArray points) Parameters: points – Input 2D point set, stored in std::vector or Mat. 注意:(
OpenCV寻找最大轮廓(实训)
在进行运动跟踪时,同时在画面中运动的物体可能有很多,为了实现跟踪摄像头画面中人物所在的区域,因为当人物在答题区域中运动时我们可以近似的认为,此时人物所产生的运动跟踪目标框就是最大的运动跟踪目标框。最大轮廓的寻找基于轮廓的提取,轮廓提取的过程由于像素的拓扑联系的限制,从而同一物体的同一区域会产生本区域自己的运动轮廓,如何从这些轮廓中提取出我们需要的最大轮廓呢。我的算法可以概括为以下几个步骤:a. 二...
Python&Opencv:获取图像最大连通域并实现其位置跟踪
0 前言 在一些图像处理的应用中,通常需要提取具有同一特征的某一块,例如在一张苏南地图中寻找面积最大的湖(图中蓝色部分)。 本文以识别最大的拳头为例,来说明几个opencv函数的用法。 1 操作流程 (0)准备工作,打开摄像头,设置参数。 (1)根据肤色提取手部。 (2)彩色变灰色,灰色变二值化。 (3)轮廓提取。 (4)对比每个轮廓大小。 (5)将小于最大轮廓的连通域填黑。 (6)显示最大连通...
图像处理中最大连通区域的求解
在matlab中有对图像的连通区域进行求解的函数,即bwlabel。但是opencv里好像没有,所以这里自己实现一下,方便以后使用。   首先,我回顾一下bwlabel的参数和用法:  L =bwlabel(BW,n)     返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还
OpenCV提取最大连通域
//选择最大区域,传进来是白底黑字 void SelectMaxRegion(Mat &amp;amp;amp;amp;amp;Src) { //---------MAt转换成IplImage----- Mat SrcColor; cvtColor(Src, SrcColor, CV_GRAY2BGR); IplImage *src = &amp;amp;amp;amp;amp;IplImage(SrcColor); /...
opencv--外接矩形(圆)
轮廓外接矩形函数--Rect   boundingRect(InputArray Point) 函数的输入类型是Point类型的vector或Mat,返回类型是Rect对象;
OpenCV-利用颜色、形态学和最大稳定极值区域MSER实现车牌区域检测
要想提取车牌号,首先要定位车牌区域,本文分别三种方法用,即颜色、形态学和最大稳定极值区域MSER的方法,对车牌区域进行判定。说得是三种方法,其实并无多大的区别。方法一:利用颜色提取车牌区域的思路:1.求得原图像的sobel边缘sobelMat2.在HSV空间上通过对色调H、饱和度S、明度V进行约束条件的限制获得图像中满足车牌背景底色的区域,得到图像bw_blue3.通过对图像中每一个像素进行决策来...
OpenCV获得最大连通域
#include #include #include #include using namespace std; #pragma comment( lib, "cv.lib" ) #pragma comment( lib, "cxcore.lib" ) #pragma comment( lib, "highgui.lib" ) int main
opencv findcontour查找最大的内轮廓
问题是怎么来的呢        比如输入一幅图像,往往需要我们找最大的轮廓,如果是仅仅是查找最大的轮廓,那么问题也比较简单了,直接找出所有的轮廓,然后根据轮廓的面积,遍历查找出最大的轮廓即可。如果是找最大的外轮廓,那么问题也比较简单,因为findContours(image_contour_outside, contours_out, hierarchy_out, RETR_EXTERNAL,
opencv 连通区域的最小外接矩形
#include "cv.h" #include "highgui.h" #include #include //#include "otsu.h" int main(int argc,char** argv) { IplImage *src,*gray,*bw,*dst; CvMemStorage* storage=cvCreateMemStorage(0); CvSeq*
Opencv选取目标颜色最大轮廓并框出
本讲实现:给定原始图片,通过直方图反投影画出目标颜色所在的所有区域中的最大区域的轮廓,并用矩形框出。 依赖的类文件见文章《Opencv直方图反投影识别颜色》
python+opencv实现简单的图片搜索功能
原文地址 http://www.pyimagesearch.com/2014/12/01/complete-guide-building-image-search-engine-python-opencv/一、图片搜索中的概念解释: 图片搜索引擎有三种不同的模式 1.Search by Meta-Data:元数据搜索模式,这种和传统的文字搜索类似,给索引数据添加文字注释,上传待查询的图片的时候
OpenCV2——计算图像最亮值
收获: 1 cv2自带的克隆函数没有问题,cv1的克隆函数会出错 cv2: img2=new Mat(); img1.cloneto(*img2); 2 cv2的均值滤波函数使用方式为blur(*src,des,Size(2,2)),该方法是有缩放的,缩放比例为1:(22) 然后是代码: MaxBright.h #include&amp;amp;amp;amp;lt;opencv2/core/core.hpp&amp;amp;amp;amp;gt; using...
OPENCV连通域分析,画连通域的外接矩形程序示例
void bwareaopen(IplImage* img, IplImage* pimg, int size) {                    //此函数的功能  CvMemStorage *storage;  CvSeq *contour;  IplImage *inputimg;  double area;    if(!img || !size) {   retur
opencv:求区域的内接矩形
实验室项目中,希望求取一个近似圆形区域的质心,原本使用最小外接圆的质心来等效为该区域质心。但是由于部分区域的形状过于不规则导致发生质心偏移现象。如下图:     蓝色为实际要求质心。红色为等效圆质心     为获取较为准确的质心,拟用最大内接矩形的中心作为该区域质心。     采用改进的中心扩散法求内接矩形:先以最小外接矩的中心作为算法的起点进行中心扩散。得到一个内解矩形,在对最小外接矩的
OpenCV-最大极值稳定区域MSER分析
最大稳定极值区域MSER是一种类似分水岭图像的分割与匹配算法,它具有仿射不变性。极值区域反映的就是集合中的像素灰度值总大于或小于其邻域区域像素的灰度值。对于最大稳定区域,通过局部阈值集操作,区域内的像素数量变化是最小的。MSER的基本原理是对一幅灰度图像(灰度值为0~255)取阈值进行二值化处理,阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会...
利用opencv提取最大白色区域
import imutils import scipy.spatial import matplotlib.pyplot as plt import os import cv2 import numpy as np images_path='./new_pig_data' # images_path='./new_disk_data' output_path='./output_pig_da...
Opencv查找轮廓并绘制
注意:转载请注明出处!  图像处理中的边缘检测是根据像素间的差异检测出轮廓边缘的像素,但它没有将轮廓作为一个整体。将这些轮廓边缘像素组装成一个整体(轮廓),就要进行轮廓检测.opencv提供了轮廓检测的函数cvFindContours,函数参数如下:  cvFindContours(CvArr *图像,CvMemStorage *存储,CvSeq ** first_contour,      ...
裁剪原图像,得到ROI区域的矩形图像 (findContours()寻找轮廓,图像裁剪) OpenCV
我知道之前用直方图方差找最佳曝光值的算法为什么有问题了。。。 因为我新增了ROI区域裁剪,是基于轮廓提取找到ROI区域的。而我在测试的时候,黑色背景板不够大,实际拍摄的图片最外面的轮廓其实是黑色背景板的,没有成功把ROI区域裁剪出来。 本博文的代码,我用自己画的图片,能够得到正确的裁剪后的ROI图片。而用测试时相机拍摄的图片,得到的裁剪结果却与原图像几乎一模一样。 当然,裁剪后的图片中仍含有...
OpenCV获取边界框,最小矩形区域和最小闭圆的轮廓
import cv2 import numpy as np #边界框,最小矩形区域和最小闭圆的轮廓 '''cv2.pyrUp()和cv2.pyrDown()用于构建图像金字塔 一般情况下,我们要处理是一副具有固定分辨率的图像,但是有些情况下, 需要对同一图像的不同分辨率的子图像进行处理。 比如,我们要在一幅图像中查找某个目标,比如脸,我们不知道目标在图像中的尺寸大小, 这种情况下,我们...
OpenCV获取联通区域轮廓
检测联通区域,主要是利用opencv的findContours函数来获取连通域的外轮廓点的集合,然后可以用drawContours来描绘这些点。需要注意的是,findContours函数的输入图像必须是单通道二值图的格式。此外,在很多情况下我们需要获取连通域的最小外接矩形,使用boundingRect函数配合findContours函数来使用即可达到目的。代码如下:#include &quot;stdafx...
OPENCV中提取连通区域轮廓
通过轮廓提取图像分割后的连同区域
OPENCV学习笔记1-8_选取图像局部区域
#include #include "opencv2/opencv.hpp" #include using namespace std; using namespace cv; int main( int argc, char* argv[] ) { Mat A = Mat::eye(6, 6, CV_32S); Mat B = A.row(2);
文章热词 统计学稳健估计opencv函数 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 找区块链培训 找python培训班