opencv常用代码
来源:互联网 发布:淘宝哪家电脑主机好 编辑:程序博客网 时间:2024/05/18 02:02
Mat、IplImage和cvMat的差别和转换
1、图片读取、保存
int main(int argc, char **argv){char* filepath = "F:\\标志牌测试.jpg";/***用IplImage类型时****/IplImage *m_Source_Pic = cvLoadImage(filepath, 1);//*与m_Source_Pic必须挨在一起,否则报错;flag=-1;默认读取图像的原通道数;flag=0;强制转化读取图像为灰度图;flag=1;读取彩色图cvNamedWindow("example");cvShowImage("原图", m_Source_Pic);/************或者用Mat型读取***********/Mat image = imread(filepath,1);if(!image.data){ AfxMessageBox(_T("图片载入错误!")); return -1;}/******图像灰度化******/Mat gray_image;cvtColor(image, gray_image, CV_BGR2GRAY);imshow("灰度化图像", gray_image);//保存图片 imwrite("F:\\毕业相关的程序\\交通指示牌的识别\\新建文件夹\\Gray_Image.jpg", gray_image);/******IplImage与Mat转换******/IplImage *m_Source_Pic = &IplImage( Mat Img);WaitKey(0);//cv的延时函数return 0;}
2、通道提取和混合
vector<Mat> channels; Mat imageBlueChannel; Mat imageGreenChannel; Mat imageRedChannel; Mat srcImage=imread(filepath,1); //分离色彩通道 split(srcImage, channels); imageBlueChannel = channels.at(0); imageGreenChannel = channels.at(1); imageRedChannel = channels.at(2); imshow("蓝色通道", imageBlueChannel); imshow("绿色通道", imageGreenChannel); imshow("红色通道", imageRedChannel); merge(channels, srcImage); imshow("混合", srcImage);
3、图像滤波
(1)方框滤波
//进行方框滤波操作 Mat out; boxFilter( image, out, -1,Size(5, 5));
(2)均值滤波
//进行均值滤波操作Mat dstImage; blur( srcImage, dstImage, Size(7, 7));
(3)高斯滤波
//进行高斯滤波操作 Mat out; GaussianBlur( image, out, Size( 5, 5 ), 0, 0 );
4、边缘检测
(1)canny算子
Mat dstImage,edge,grayImage;// 【1】创建与src同类型和大小的矩阵(dst)dstImage.create( srcImage1.size(), srcImage1.type() );// 【2】将原图像转换为灰度图像cvtColor( srcImage1, grayImage, COLOR_BGR2GRAY );// 【3】先用使用 3x3内核来降噪blur( grayImage, edge, Size(3,3) );// 【4】运行Canny算子Canny( edge, edge, 3, 9,3 );//【5】将g_dstImage内的所有元素设置为0 dstImage = Scalar::all(0);//【6】使用Canny算子输出的边缘图g_cannyDetectedEdges作为掩码,来将原图g_srcImage拷到目标图g_dstImage中srcImage1.copyTo( dstImage, edge);
(2)sobel算子
Mat grad_x, grad_y;Mat abs_grad_x, abs_grad_y,dst;//【1】载入原始图 Mat src = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图//【2】显示原始图 imshow("【原始图】sobel边缘检测", src); //【3】求 X方向梯度Sobel( src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT );convertScaleAbs( grad_x, abs_grad_x );imshow("【效果图】 X方向Sobel", abs_grad_x); //【4】求Y方向梯度Sobel( src, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT );convertScaleAbs( grad_y, abs_grad_y );imshow("【效果图】Y方向Sobel", abs_grad_y); //【5】合并梯度(近似)addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst );imshow("【效果图】整体方向Sobel", dst);
(3)拉普拉斯算子
Mat src,src_gray,dst, abs_dst; //【1】载入原始图 src = imread("1.jpg"); //工程目录下应该有一张名为1.jpg的素材图 //【2】显示原始图 imshow("【原始图】图像Laplace变换", src); //【3】使用高斯滤波消除噪声 GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT ); //【4】转换为灰度图 cvtColor( src, src_gray, COLOR_RGB2GRAY ); //【5】使用Laplace函数 Laplacian( src_gray, dst, CV_16S, 3, 1, 0, BORDER_DEFAULT ); //【6】计算绝对值,并将结果转换成8位 convertScaleAbs( dst, abs_dst );
4、视频操作
剪切视频
CvCapture* capture = cvCaptureFromAVI("F:\\毕业论文相关\\机场视频\\安检区外北侧.ts"); int i = 0; IplImage* img = 0; char image_name[50]; cvNamedWindow("实时视频"); //读取和显示 while (1) { img = cvQueryFrame(capture); //获取一帧图片 if (img == NULL) break; cvShowImage("实时视频", img); //将其显示 char key = cvWaitKey(20); sprintf_s(image_name, "%s%d%s","F:\\毕业论文相关\\机场视频\\density_img_", ++i, ".jpg");//保存的图片名 if (i%5==0) { cvSaveImage(image_name, img); //保存一帧图片 } } cvReleaseCapture(&capture); cvDestroyWindow("实时视频");
【部分代码直接粘贴复制于浅墨大神】
0 0
- OPENCV常用小代码
- opencv 常用代码段
- opencv常用代码
- OpenCV常用操作的代码
- OpenCV中常用代码段
- opencv图像处理常用完整示例代码总结
- opencv在Centos下编译及常用资料代码片记录
- OpenCV 常用算法
- openCV 常用数据结构
- OpenCV 常用算法
- opencv函数库常用函数
- opencv的常用方法
- OpenCV常用函数
- OpenCv常用函数实例
- OpenCV 常用算法
- opencv常用数据结构
- OpenCV常用函数
- 常用OpenCV函数
- 性能测试知多少----性能测试分类之我见
- PowerDesigner15.1创建模型及生成带注释sql操作手册
- 常用的排序算法
- scala 类型强转
- 从头到尾打印链表
- opencv常用代码
- 【多线程】多线程教程之二---线程间同步
- mysql 5.5 安装图解(附安装到最后停住的解决方法)
- phpstorm快捷键使用
- UDP进程通信试验
- Qt 程序打包发布总结
- twig 模板引擎使渲染视图更加优雅
- 基于全连接孪生网络的目标跟踪(siamese-fc)
- 10 qt udp编程和网络聊天室的实现