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

OpenCVRGB图像灰度化,并提取轮廓

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

 

主要函数说明:

<1> cvCvtColor( const CvArr* src, CvArr* dst, int code )

    表示将图像src的颜色空间转换后保存到图像dst中,其中code表示颜色空间转化形式,主要有CV_BGR2BGRACV_BGRA2BGRCV_BGR2RGBACV_RGBA2BGRCV_BGR2RGB60种颜色空间转换形式,本程序中code为:CV_RGB2GRAY

 

<2> cvCanny( const CvArr* image, CvArr* edges, double threshold1,

        double threshold2, int aperture_size CV_DEFAULT(3) );

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

 

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

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

代码如下:

// RGB_Gray_Canny.cpp : Defines the entry point for the console application.

 

#include "stdafx.h"

 

#include <cv.h>

#include <cxcore.h>

#include <highgui.h>

#include <iostream>

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<<"Press ESC to Quit"<<endl;

      

       //将颜色空间由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;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值