以下所有例子来源于http://wiki.opencv.org.cn
一、读入图片显示
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#if 1
using namespace cv;
int main() {
//声明IplImage指针
IplImage* pImg;
//载入图片
pImg=cvLoadImage("../Lena.jpg",CV_LOAD_IMAGE_COLOR); //C:\2.jpg 要使用'/' 而不是windows的 '\'
if(NULL==pImg)
{
printf("image can't read!\n");
return -1;
}
// Mat image(pImg); //有这句话,为什么会出错
//创建窗口
//cvNamedWindow("Image",CV_WINDOW_AUTOSIZE); // 为什么注释掉这句话,程序尼玛也运行
//显示图像
cvShowImage("Image",pImg);
//等待按键
cvWaitKey(0);
//销毁窗口
cvDestroyWindow("Image");
//释放图像
cvReleaseImage(&pImg); // 为什么我把这条语句放在cvWaitKey前面时,窗口任然有图像显示,放在cvShowImage前面时才没有图片显示
return 0;
}
#else
#if 0
using namespace cv; //下面函数要cv前缀
int main()
{
Mat image;
image=imread("C:/2.jpg");
imshow("li",image);
waitKey();
return 0;
}
#else
using namespace cv;//下面的所有cv相关类型不用加上前缀了,这里的前缀为cv::
int main(int argc, char* argv[])
{
Mat img = imread("Lena.jpg"); //声明Mat变量并调入lena的照片,图片放在工程目录中直接使用"Lena.jpg"不行,要把图片放在工程目录的上一层
//然后使用../Lena.jpg,对于使用vs的这使用..\\Lena.jpg,第一个\为转义字符
if(!img.data) //判断图片调入是否成功
return -1; //调入图片失败则退出
//创建窗口,并确定其为大小不可变类型窗口
namedWindow("loveLena", CV_WINDOW_AUTOSIZE);
//显示图片。如果你不介意窗口大小可变,可以直接注释掉上一句。因为imshow可以直接创建窗口
imshow("loveLena", img);
waitKey(); //等待按键
return 0;
}
#endif
#endif
二、图像创建、保存和复制
最终在工程目录上一级目录中生成copy.jpg
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* pImg; //声明IplImage指针
//载入图像,强制转化为Gray
pImg = cvLoadImage("../Lena.jpg", 0);
if(pImg != NULL )
{
IplImage* pImg2 = cvCreateImage(cvGetSize(pImg),
pImg->depth,
pImg->nChannels);
cvCopy(pImg, pImg2, NULL);
cvSaveImage("../copy.jpg", pImg2);//把图像写入文件
cvNamedWindow( "Image", 1 );//创建窗口
cvShowImage( "Image", pImg );//显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "Image" );//销毁窗口
cvReleaseImage( &pImg ); //释放图像
cvReleaseImage( &pImg2 ); //释放图像
return 0;
}
return -1;
}
三、canny边缘检测
重点函数:
cvCanny(pImg, pCannyImg, 50, 150, 3);
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
int main( int argc, char** argv )
{
//声明IplImage指针
IplImage* pImg = NULL;
IplImage* pCannyImg = NULL;
//载入图像,强制转化为Gray
pImg = cvLoadImage("../Lena.jpg", 0);
if(pImg != NULL )
{
//为canny边缘图像申请空间
pCannyImg = cvCreateImage(cvGetSize(pImg),
IPL_DEPTH_8U,
1);
//canny边缘检测
cvCanny(pImg, pCannyImg, 50, 150, 3);
//创建窗口
cvNamedWindow("src", 1);
cvNamedWindow("canny",1);
//显示图像