【opencv学习笔记4】视频流的帧图像变换
来源:互联网 发布:大数据在行业应用 编辑:程序博客网 时间:2024/05/16 10:28
通过前面视频流的每一帧的读取,现在我们需要考虑对视频流的滤波,通过修改前面程序,实现随着视频流的播放对其中的每一帧进行一些简单操作。
现在最简单的变化就是对每一帧进行一些简单的运算,最开始可以通过对某一幅图像进行平滑处理,平滑处理模块与简单的基本测试模块代码如下:
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include<highgui.h>#include <cv.h>using namespace cv; using namespace std; //对图像进行平滑处理void smoothimage(IplImage *image){cvNamedWindow("original picture");//创建原始图像窗口cvNamedWindow("smooth picture");//创建处理图像窗口cvShowImage("original picture",image);//显示原始图像//创建新图像IplImage *out=cvCreateImage(cvGetSize(image), //图像大小跟原始图像一样IPL_DEPTH_8U, //图像深度为8位3 //表示有三个通道);//做平滑处理cvSmooth(image,out,CV_GAUSSIAN,3,3);//用高斯进行平滑,对每个像素点使用3*3区域进行高斯平滑处理cvShowImage("smooth picture",out);//显示处理后的图像cvReleaseImage(&out);//释放处理后图像的内存cvWaitKey(0);cvDestroyWindow("original picture");cvDestroyWindow("smooth picture");}//对平滑模块的小测试int main(int agrc,char **argv){IplImage *image=cvLoadImage("ali.jpg");smoothimage(image);cvReleaseImage(&image);return 0;}
以下是对图像进行平滑效果的处理:
若当对图像进行缩放系数为2 的缩放处理,可以通过函数cvPyrDown()完成上述功能。代码如下:
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include<highgui.h>#include <cv.h>#include <cxcore.h>using namespace cv; using namespace std; //cvPyrDown创建一幅宽度与高度为输入图像一半的图像IplImage *doPyrDown(IplImage *in,int filter=CV_GAUSSIAN){assert(in->width%2==0&&in->height%2==0);//确保图像宽度高度刚好是2的倍数IplImage *out=cvCreateImage(CvSize(in->width/2,in->height/2),in->depth,in->nChannels);cvPyrDown(in,out);//cvPyrDown完成缩放的比例return out;}//测试缩放小模块int main(int agrc,char **argv){IplImage *image=cvLoadImage("ali.jpg");IplImage *out=doPyrDown(image);cvNamedWindow("original picture",CV_WINDOW_AUTOSIZE);cvNamedWindow("handled picture",CV_WINDOW_AUTOSIZE);cvShowImage("original picture",image);cvShowImage("handled picture",out);cvWaitKey(0);//使程序暂停,当用户按键则进行以下操作cvReleaseImage(&image);cvReleaseImage(&out);cvDestroyWindow("original picture");cvDestroyWindow("handled picture");return 0;}
下面进行利用canny边缘检测输出写入一个单通道(灰度级)图像,在这个程序中边缘检测其产生了一个与输入图像大小相同但只有一个通道的图像。代码如下:
#include <opencv2\opencv.hpp> #include <iostream> #include <string> #include<highgui.h>#include <cv.h>#include <cxcore.h>using namespace cv; using namespace std; //canny边缘检测将输出写入一个单通道(灰度级)图像IplImage *doCanny(IplImage *in,double lowthresh,double highthresh,double aperture){if (in->nChannels!=1)return (0);IplImage *out=cvCreateImage(CvSize(cvGetSize(in)),IPL_DEPTH_8U,//8比特的编码1//表示单通道);cvCanny(in,out,lowthresh,highthresh,aperture);//void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );//image 输入单通道图像(可以是彩色图像)对于多通道的图像可以用cvCvtColor()修改。//edges 输出的边缘图像 ,也是单通道的,但是是黑白的//threshold1 第一个阈值//threshold2 第二个阈值 //aperture_size Sobel 算子内核大小return out;}int main(int argc,char **argv){cvNamedWindow("picture1",CV_WINDOW_AUTOSIZE);cvNamedWindow("picture2",CV_WINDOW_AUTOSIZE);IplImage *in1=cvLoadImage("lena.jpg");IplImage *in2=cvCreateImage(CvSize(cvGetSize(in1)),IPL_DEPTH_8U,1);cvCvtColor(in1,in2,CV_RGB2GRAY);IplImage *out=cvCreateImage(CvSize(cvGetSize(in2)),IPL_DEPTH_8U,1);out=doCanny(in2,10,200,3);cvShowImage("picture1",in1);cvShowImage("picture1",in2);cvShowImage("picture2",out);cvWaitKey(0);cvReleaseImage(&in1);cvReleaseImage(&out);cvDestroyWindow("picture1");cvDestroyWindow("picture12");return 0;}
0 0
- 【opencv学习笔记4】视频流的帧图像变换
- opencv学习笔记4:图像变换
- 【OpenCV学习笔记 008】基于形态学运算的图像变换
- 【OpenCV学习笔记】十四、图像几何变换
- OpenCV学习笔记01--图像和视频的显示
- OpenCV学习笔记(基于OpenCV 2.4)二:图像的加载显示及简单变换
- OpenCV学习笔记之图像视频显示
- Opencv学习笔记(三):图像的使用与操作_颜色空间的变换
- 图像处理学习笔记之图像的几何变换(4)镜像变换
- OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
- 我的OpenCV学习笔记(18):使用Sobel变化和拉普拉斯变换检测图像边沿
- OpenCV学习笔记(十八)——图像的各种变换(cvtColor*+)imgproc
- openCV学习笔记(四)--图像的几何变换Geometric Transformations of Images
- OpenCV学习笔记【4】:一个简单的变换
- OpenCV笔记8:一个简单的变换:图像的平滑
- opencv图像的形态学变换
- opencv 图像的几何变换
- opencv:图像的基本变换
- 一个mysql错误
- C#借助API实现黑盒自动化测试工具的编写
- 第四周 项目二--分数类的雏形
- House Robber
- 第四周项目1三角形类的构造函数(4)
- 【opencv学习笔记4】视频流的帧图像变换
- 【LeetCode OJ 021】Merge Two Sorted Lists
- 【LeetCode从零单排】No121Best Time to Buy and Sell Stock
- 手把手教你用Java实现AOP
- 完整java开发中JDBC连接数据库代码和步骤
- Spring3 MVC 深入核心研究
- 第二学期第四周 阅读程序理解构造函数和析构函数
- Python 罗列一年的日期
- 二叉树遍历之递归算法