OpenCV—RGB图像灰度化,并提取轮廓

主要功能:加载一个RGB彩色图像,将其转化成灰度图,并采用Canny算法提取灰度图的边缘

主要函数说明:

<1> cvCvtColor(

const CvArr* src, CvArr* dst, int code )

表示将图像src的颜色空间转换后保存到图像dst中,其中code表示颜色空间转化形式,主要有CV_BGR2BGRA、CV_BGRA2BGR、CV_BGR2RGBA、CV_RGBA2BGR、CV_BGR2RGB等60种颜色空间转换形式,本程序中code为:CV_RGB2GRAY。

<2> cvCanny( const

CvArr* image, CvArr* edges, double threshold1,

double threshold2, int aperture_size CV_DEFAULT(3)

);

表示将图像image中阈值为thresh1至thresh2间的轮廓提取出来,并将轮廓图像保存到edges中。

<3>另外在轮廓图像中添加了一个滑动条以控制阈值范围,查看不同阈值范围内的轮廓图像。

***********************

代码如下:

// RGB_Gray_Canny.cpp :

Defines the entry point for the console application.

#include

"stdafx.h"

#include

#include

#include

#include

using namespace

std;

//声明图像IplImage指针

IplImage*

pSrcImg=NULL;

IplImage* pGrayImg =

NULL;

IplImage* pCannyImg =

NULL;

int Thresh=50;

//滑动条响应函数

void onTrackerSlid(int

thresh)

{

cvCanny(pGrayImg,

pCannyImg,(float)thresh,(float)thresh*3, 3);

cvShowImage( "Canny

Image", pCannyImg );

}

int main( int argc, char**

argv )

{

if(argc!=2)

argv[1]="lena.jpg";

//载入图像,强制转化为Gray

if((pSrcImg = cvLoadImage( argv[1],1)) != 0 )

{

cout<

Quit"<

//将颜色空间由RGB转化为Gray

pGrayImg=cvCreateImage(cvGetSize(pSrcImg),8,1);

cvCvtColor(pSrcImg,pGrayImg,CV_RGB2GRAY);

//canny边缘检测

pCannyImg =

cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);

//cvCanny(pGrayImg, pCannyImg, 150,50, 3);

//创建窗口

cvNamedWindow( "Source Image",

CV_WINDOW_AUTOSIZE);

cvNamedWindow( "Gray Image",CV_WINDOW_AUTOSIZE);

cvNamedWindow( "Canny Image",CV_WINDOW_AUTOSIZE);

//添加滑动条来调节边缘检测的阈值

cvShowImage( "Gray Image", pCannyImg);

cvCreateTrackbar("Threshold", "Canny Image",

&Thresh, 100, onTrackerSlid);

onTrackerSlid(Thresh);

//显示图像

cvShowImage( "Source Image", pSrcImg );

cvShowImage( "Gray Image",pGrayImg);

//保存图像

cvSaveImage( "Gray_Image.jpg",pGrayImg);

cvSaveImage( "Canny_Image.jpg",pCannyImg);

//等待按"ESC"键退出

while(1)

if(cvWaitKey(100)==27)

break;

//销毁窗口

//cvWaitKey(0);

cvDestroyWindow( "Source Image" );

cvDestroyWindow( "Canny Image" );

cvDestroyWindow( "Gray Image");

//释放图像

cvReleaseImage( &pGrayImg );

cvReleaseImage( &pCannyImg );

cvReleaseImage( &pSrcImg);

return 0;

}

return

-1;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐