【程序一】 

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

主要函数说明:

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

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

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

                         double threshold2, int aperture_size CV_DEFAULT(3) );

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

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

 1 #include <cv.h>
 2 #include <cxcore.h>
 3 #include <highgui.h>
 4 #include <iostream.h>
 5 
 6 //声明图像IplImage指针
 7 IplImage* pSrcImg=NULL;
 8 IplImage* pGrayImg = NULL; 
 9 IplImage* pCannyImg = NULL;
10 int Thresh=50;
11 
12 //滑动条响应函数
13 void onTrackerSlid(int thresh)
14 {
15     cvCanny(pGrayImg, pCannyImg,(float)thresh,(float)thresh*33);
16     cvShowImage( "Canny Image", pCannyImg );
17 }
18 int main( int argc, char** argv )
19 {
20   if(argc!=2)
21       argv[1]="lena.jpg";
22   //载入图像,强制转化为Gray
23   if((pSrcImg = cvLoadImage( argv[1],1)) != 0 )
24     {
25       cout<<"Press ESC to Quit两个简单的OpenCV程序两个简单的OpenCV程序"<<endl;
26       //将颜色空间由RGB转化为Gray
27       pGrayImg=cvCreateImage(cvGetSize(pSrcImg),8,1);
28       cvCvtColor(pSrcImg,pGrayImg,CV_RGB2GRAY);
29       //canny边缘检测
30       pCannyImg = cvCreateImage(cvGetSize(pGrayImg),IPL_DEPTH_8U,1);
31       //cvCanny(pGrayImg, pCannyImg, 150,50, 3);
32       //创建窗口
33       cvNamedWindow( "Source Image", CV_WINDOW_AUTOSIZE);
34       cvNamedWindow( "Gray Image",CV_WINDOW_AUTOSIZE);
35       cvNamedWindow( "Canny Image",CV_WINDOW_AUTOSIZE);
36       //添加滑动条来调节边缘检测的阈值
37       cvShowImage( "Gray Image", pCannyImg);
38       cvCreateTrackbar("Threshold""Canny Image"&Thresh, 100, onTrackerSlid);
39       onTrackerSlid(Thresh);      
40       //显示图像
41       cvShowImage( "Source Image", pSrcImg );
42       cvShowImage( "Gray Image",pGrayImg);
43       //保存图像
44       cvSaveImage( "Gray_Image.jpg",pGrayImg);
45       cvSaveImage( "Canny_Image.jpg",pCannyImg);
46       //等待按"ESC"键退出
47       while(1)
48           if(cvWaitKey(100)==27)
49               break
50       //销毁窗口
51       cvDestroyWindow( "Source Image" );
52       cvDestroyWindow( "Canny Image" );
53       cvDestroyWindow( "Gray Image");
54       //释放图像
55       cvReleaseImage( &pGrayImg ); 
56       cvReleaseImage( &pCannyImg ); 
57       cvReleaseImage( &pSrcImg);
58       
59       return 0;
60     } 
61   return -1;
62 }

运行结果:

两个简单的OpenCV程序  两个简单的OpenCV程序

                              原始图像                            灰度图像

两个简单的OpenCV程序

Canny轮廓

【程序二】

主要功能:加载视频、获取视频中的某一帧、添加滑动条、图像的smooth处理

程序代码:


#include <highgui.h>
#include 
<iostream.h>

#pragma comment(lib,"cv.lib")
#pragma comment(lib,"highgui.lib");
int g_Pos=5;
CvCapture 
*g_Cap=NULL;
IplImage
*frame=NULL;

void ImgProcess(IplImage*img)
{
    cvNamedWindow(
"Image_In_Wnd");
    cvNamedWindow(
"Image_Out_Wnd");
    IplImage
*out=cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
    cvShowImage(
"Image_In_Wnd",img);
    cvSmooth(img,
out,CV_GAUSSIAN,3,3);
    cvShowImage(
"Image_Out_Wnd",out);
    cvWaitKey(
0);
    cvDestroyWindow(
"Image_In_Wnd");
    cvDestroyWindow(
"Image_Out_Wnd");
    cvReleaseImage(
&out);
}

void onTrackerSlide(int pos)
{
    cvSetCaptureProperty(g_Cap,CV_CAP_PROP_POS_FRAMES,pos);
}

int main(int argc,char **argv)
{
    cvNamedWindow(
"Test",CV_WINDOW_AUTOSIZE);
    
if(argc<=2)
        argv[
1]="test.avi";
    g_Cap
=cvCreateFileCapture(argv[1]);
    
int Frames=(int)cvGetCaptureProperty(g_Cap,CV_CAP_PROP_FRAME_COUNT);
    
if(Frames!=0)
        cvCreateTrackbar(
"Frame Position:","Test",&g_Pos,Frames,onTrackerSlide);
    
while(1)
    {
        frame
=cvQueryFrame(g_Cap);
        
if(frame!=NULL)
            cvShowImage(
"Test",frame);
        
char c=cvWaitKey(100);
        
if(c==27)
            
break;
    }
    ImgProcess(frame);
    cvDestroyWindow(
"Test");
    cvReleaseImage(
&frame);
    
return 0;
}

运行结果:略

(注意视频文件的选取)

相关文章:

  • 2021-11-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
  • 2022-01-08
  • 2021-04-23
猜你喜欢
  • 2021-08-23
  • 2022-01-15
  • 2022-01-09
  • 2022-02-02
  • 2021-07-29
  • 2021-12-02
  • 2021-10-26
相关资源
相似解决方案