rectangle函数opencv(Opencv中cvBoundingRect函数怎么用)

本文目录
- Opencv中cvBoundingRect函数怎么用
- 急! 急! 怎么用c语言opencv画一个黑色框,在黑色框里画几个白色框和一条线
- opencv中检测出人脸之后,需要把检测出的人脸区域提取出来,用作人脸识别,那么如何提取人脸区域
- opencv算法怎么实现八邻域的标记
- 如何利用opencv实现彩色图像边缘检测算法
Opencv中cvBoundingRect函数怎么用
CvMemStorage* storage = cvCreateMemStorage( 0 );
CvSeq* contours = NULL;
imgTemp = cvCloneImage( imgSrc );
cvFindContours( imgTemp, storage, &contours, sizeof( CvContour ), CV_RETR_LIST, CV_CHAIN_APPROX_NONE );
for( ; contours != NULL; contours = contours -》 h_next )
{
CvRect rect = cvBoundingRect( contours, 0 );
cvRectangle( imgSrc, cvPoint( rect.x, rect.y ),cvPoint( rect.x + rect.width, rect.y + rect.height ), cvScalar(0,0,0), 0 );
}
cvSaveImage( CT2CA( imgPathName ), imgSrc );
源图像是这样的:
执行这段代码之后是这样的:
框的大小在rect这个变量里,长宽直接rect.width,rect.height
急! 急! 怎么用c语言opencv画一个黑色框,在黑色框里画几个白色框和一条线
画框用OpenCV自带的cvRectangle函数就行,参数分别是(图像,矩形左上顶点,矩形右下顶点,颜色,线条粗细),黑色cvScalar(0,0,0),白色cvScalar(255,255,255)。划线用cvLine就行,参数分别是(图像,点1,点2,颜色,线条粗细)。黑框里面画几个白框,你只要改变cvRectangle中矩形对顶点位置和颜色就行,很简单的。
opencv中检测出人脸之后,需要把检测出的人脸区域提取出来,用作人脸识别,那么如何提取人脸区域
首先使用opencv自带的rectangle函数将检测出来的人脸用矩形框框住,然后新定义一个Mat类型变量将矩形框框住的部分提取出来就可以了;
如rectangle(image, Rect(x1,y1,w1,h1), Scalar(0,0,255),1);
Mat image_cut=image(cvRect(x,y,w,h));
imshow("",image_cut);即可
opencv算法怎么实现八邻域的标记
用cvRectangle()函数。
OpenCV里面的绘图函数函数功能: 通过对角线上的两个顶点绘制简单、指定粗细或者带填充的矩形函数原型:void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );参数介绍:img -- 图像.pt1 -- 矩形的一个顶点。pt2 -- 矩形对角线上的另一个顶点color -- 线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。thickness -- 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。line_type -- 线条的类型。见cvLine的描述shift -- 坐标点的小数点位数。
如何利用opencv实现彩色图像边缘检测算法
在opencv中显示边缘检测很简单,只需调用一个cvCanny函数,其使用的是Canny算法来实现对图像的边缘检测.
函数原型为:
void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );
第一个参数为待检测的图像,注意一点,其必须是灰度图.
第二个参数为输出的边缘图,其也是一个灰度图.
后三个参数与Canny算法直接相关,threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割,aperture_size算子内核大小,可以去看看Canny算法.
从彩色图到灰度图需要使用到cvCvtColor函数,其接受三个参数,第一为输入,第二为输出,第三个为转换的标识,我们这边是RGB到GRAY,使用的是CV_RGB2GRAY.
参考demo代码如下:
#include 《iostream》
#include 《string》
#include 《sstream》
#include 《opencv/cv.h》
#include 《opencv/highgui.h》
using namespace std;
int String2int(const string& str_)
{
int _nre = 0;
stringstream _ss;
_ss 《《 str_;
_ss 》》 _nre;
return _nre;
}
void DoCanny(const string& strFileName_)
{
//原彩色图片
IplImage* _pIplImageIn = cvLoadImage(strFileName_.data());
if (_pIplImageIn == NULL)
{
return;
}
//彩色图片转换成灰度图放置的图片
IplImage* _pIplImageCanny = cvCreateImage(cvGetSize(_pIplImageIn), _pIplImageIn-》depth, 1);
cvCvtColor(_pIplImageIn, _pIplImageCanny, CV_RGB2GRAY);//CV_RGB2GRAY将rgb图转成灰度图
//只有边缘路径的图片
IplImage* _pIplImageOut = cvCreateImage(cvGetSize(_pIplImageIn), IPL_DEPTH_8U, 1);
//边缘检测只能作用于灰度图
if (_pIplImageCanny-》nChannels != 1)
{
return;
}
//边缘检测操作
cvCanny(_pIplImageCanny, _pIplImageOut, 1, 110, 3);
cvNamedWindow("Src");
cvShowImage("Src", _pIplImageIn);
cvNamedWindow("Canny");
cvShowImage("Canny", _pIplImageOut);
cvWaitKey(0);
cvReleaseImage(&_pIplImageIn);
cvReleaseImage(&_pIplImageCanny);
cvReleaseImage(&_pIplImageOut);
cvDestroyWindow("Src");
cvDestroyWindow("Canny");
}
int main(int argc, char* argv)
{
if (argc 《 2)
{
cout 《《 "You should give the filename of picture!" 《《 endl;
return -1;
}
DoCanny(argv);
return 0;
}

更多文章:
118论坛手机打不开了怎么回事?118图118论坛网址怎么变成卖茶叶的
2025年6月9日 10:45
西安abap开发培训(SAP ABAP培训,ABAP培训怎么样)
2025年12月31日 01:00
loopback下载(如何在ubuntu命令行下下载kvm)
2026年4月9日 08:30
security video(bios setup utility怎么设置开机密码 不是登陆密码啊)
2026年1月30日 08:00
asp session用法(关于ASP.NET中session的用法)
2026年5月16日 08:30
斯莱德男装品牌倒闭了(jj,马华,esprit,斯莱德,zara,美邦,这几个品牌如何评价)
2026年7月10日 12:30
covered interest rate parity(Interest Rate Parity代表什么)
2026年2月19日 06:00
特斯拉model3百公里加速(model3百公里加速是多少)
2026年1月18日 10:00
php执行mysql语句(php连接mysql数据库,执行查询语句后,排序后再输出)
2025年11月5日 18:30












