两个简单的OpenCV程序
2008-10-31 17:25
363 查看
【程序一】
主要功能:加载一个RGB彩色图像,将其转化成灰度图,并提取灰度图的边缘
主要函数说明:
<1> CVAPI(void) 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> CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size CV_DEFAULT(3) );
表示将图像image中阈值为thresh1至thresh2间的轮廓提取出来,并将轮廓图像保存到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*3, 3);
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"<<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 }
运行结果:
程序二代码:
#include <cv.h>
#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;
}
运行结果:略
(注意视频文件的选取)
主要功能:加载一个RGB彩色图像,将其转化成灰度图,并提取灰度图的边缘
主要函数说明:
<1> CVAPI(void) 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> CVAPI(void) cvCanny( const CvArr* image, CvArr* edges, double threshold1,
double threshold2, int aperture_size CV_DEFAULT(3) );
表示将图像image中阈值为thresh1至thresh2间的轮廓提取出来,并将轮廓图像保存到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*3, 3);
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"<<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 }
运行结果:
程序二代码:
#include <cv.h>
#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;
}
运行结果:略
(注意视频文件的选取)
相关文章推荐
- 用Qt做的两个简单的测试台程序
- opencv中cvFindContours函数两个测试程序
- OpenCV3 C++简单的程序及常用图片
- 简单编程(三)编写一个程序,要求用户输入两个整数,然后计算并输出他们的和、差、积、商。
- 简单且线程安全的两个单例模式java程序
- 两个简单的画验证码图形程序
- 与Dbus相关的文章,完成两个简单的收发程序。
- 最近刚学到容器Vector,就顺便编写了两个简单的小程序
- opencv实践程序6——简单(otsu)的背景差分法
- Java & OpenCV (一) ——环境配置及简单程序编写
- 与Dbus相关的文章,完成两个简单的收发程序。
- Linux下两个程序进行socket通信的简单例子
- linux下两个程序的简单单向通信
- JS写一个简单的程序,输入两个整数,打印这两个数的和,差,积,余数
- 【opencv学习笔记五】一个简单程序:图像读取与显示
- 两个简单的画验证码图形程序
- 我的实现图像简单复制的两个c程序
- 用 OpenCV 编写一个简单的摄像头视频监控程序
- 一个简单的显示图像程序(OpenCV)
- JAVA第一天,简单的linux命令和两个小程序