计算机视觉(opencv和卷积)
2016-11-23 14:56
363 查看
计算机视觉 (opencv与卷积)
代码如下:
一:
使用VideoCapture类读取摄像机与视频
二:读取图片
三:Mat的一些基本操作
四:图像x方向上的求导
公式:g(x,y)=f(x,y-1)-f(x,y+1)
五:图像卷积操作
利用卷积可以实现对图像模糊处理,边缘检测,产生轧花效果的图像。
输出的图像g(x,y)=f(x,y)model(x,y);如图中,0*4+0*0+0*0+0*0+0*1+0*1+0*0+0*1+2(-4)=-8
即图中(2,2)的值为-8。
![](https://img-blog.csdn.net/20151012211045222?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
六:高斯模糊创建与卷积的操作
高斯模糊通常用来减少图像噪声以及降低细节层次。
“模糊”,可以理解成每一个像素都取周边像素的平均值。
![](http://pic002.cnblogs.com/images/2012/381513/2012030509101267.png)
通过高斯定理,计算相应位置变化后的值,得到变换的模型,在卷积操作。如果图为彩色图,要对RGB三个通道分别做高斯模糊
八:利用API进行相关操作
代码如下:
一:
使用VideoCapture类读取摄像机与视频
VideoCapture cap(0);//0为主摄像头1和2可以添加与USB相连的摄像头,也可添加路径使用其他video while (true) { Mat frame;//创建Mat cap >> frame;//读取摄像头存入frame中 namedWindow("123",0);//创建窗口123 0可以改变窗口大小,1不能改变窗口大小 imshow("123",frame);//将frame展示在123窗口 waitKey(30);//等待30毫秒读取下一帧操作 }
二:读取图片
Mat imggray=imread("123.jpeg",1);//读取图片,1表示图像的三通道彩图 0表示灰度图cv_8uc1 cvtColor(imggray, imggray, CV_RGB2GRAY);//将彩图转换灰度图 参数(原图,目标图,转换为什么类型) cout<<(int)imggray.at<uchar>(1, 1);//输出图片(1,1)的像素值
三:Mat的一些基本操作
Mat image = Mat::eye(5,5,CV_64FC1);//创建5*5二维数组eye(单位矩阵) zero(全0矩阵 ) cout << image << endl; Mat image1 = Mat::ones(5, 5, CV_64FC1);ones(全1矩阵) Mat sum = image +image1;//矩阵相加 cout << sum;//输出相加后的矩阵 image1.t();//转置 image1.copyTo();//拷贝 image1.inv();//求逆
四:图像x方向上的求导
公式:g(x,y)=f(x,y-1)-f(x,y+1)
VideoCapture cap(0); while (true) { Mat frame; cap>>frame; cvtColor(frame, frame, CV_RGB2GRAY);//将当前frame转为灰度图 //cout << "row:" << frame.rows << "col:" << frame.cols << endl;//输出图像的行列值 Mat dimg = Mat(frame.rows, frame.cols - 2, CV_8UC1);//第一列和最后一列不处理 for (int i = 0;i < frame.rows;i++) { for (int j = 1;j < frame.cols - 1;j++) { dimg.at<uchar>(i,j-1)=frame.at<uchar>(i, j - 1) - frame.at<uchar>(i, j + 1);//求导 } }
五:图像卷积操作
利用卷积可以实现对图像模糊处理,边缘检测,产生轧花效果的图像。
输出的图像g(x,y)=f(x,y)model(x,y);如图中,0*4+0*0+0*0+0*0+0*1+0*1+0*0+0*1+2(-4)=-8
即图中(2,2)的值为-8。
Mat dimg = Mat(frame.rows, frame.cols - 2, CV_8UC1); Mat model = Mat(1, 3, CV_64FC1);//卷积的模型 model.at<double>(0, 0) = 1;//模型赋值 model.at<double>(0, 1) = 0; model.at<double>(0, 2) = -1; for (int i = 0;i < frame.rows;i++) { for (int j = 1;j < frame.cols - 1;j++) { int half = model.cols / 2 double sum = 0; for (int m = 0;m < model.rows;m++) { for (int n =-half;n < model.cols-half;n++) { sum +=(double)( frame.at<uchar>(i + m, j + n))*model.at<double>(m, n + half); } } dimg.at<uchar>(i, j - 1) =(uchar) sum;//将得到的sum赋给输出矩阵相应位置 } } imshow("123", dimg); waitKey(10); }
六:高斯模糊创建与卷积的操作
高斯模糊通常用来减少图像噪声以及降低细节层次。
“模糊”,可以理解成每一个像素都取周边像素的平均值。
![](http://pic002.cnblogs.com/images/2012/381513/2012030509101267.png)
通过高斯定理,计算相应位置变化后的值,得到变换的模型,在卷积操作。如果图为彩色图,要对RGB三个通道分别做高斯模糊
Mat gauss(5, 5, CV_64FC1);//创建高斯矩阵 double sigma = 0.5;//定义sigma大小 for (int i = -2;i < 3;i++) {//从边缘开始 for (int j = -2;j < 3;j++) { gauss.at<double>(i+2,j+2)=exp(-(i*i + j*j) / (2 * sigma*sigma));//计算相应位置的高斯值 } } double gssum=sum(gauss).val[0];//矩阵求和得到中心点的高斯模糊值 for (int i = -2;i < 3;i++) { for (int j = -2;j < 3;j++) { gauss.at<double>(i + 2, j + 2)/=gssum;//归一化处理 } }
VideoCapture cap(0); while (true) { Mat frame; cap >> frame; cvtColor(fra 94e5 me, frame, CV_RGB2GRAY); Mat dimg = Mat(frame.rows - 4, frame.cols - 4, CV_8UC1); for (int i = 2;i < frame.rows - 2;i++) { for (int j = 2;j < frame.cols-2;j++) { double sum = 0; for (int m = 0;m < gauss.rows;m++) { for (int n = 0;n < gauss.cols;n++) { sum +=(double) frame.at<uchar>(i + m - 2, j + n - 2)*gauss.at<double>(m, n);//将frame进行高斯模糊与原图卷积处理 } } dimg.at<uchar>(i - 2, j - 2) = (uchar)sum; } } imshow("gauss", dimg); waitKey(10); }
八:利用API进行相关操作
VideoCapture cap(0); while (true) { Mat frame; cap >> frame; cvtColor(frame, frame, CV_RGB2GRAY); GaussianBlur(frame, frame, cvSize(5, 5), 10, 10);//高斯滤波函数 Canny(frame, frame, 100, 100);//Canny边缘检测 Sobel(frame, frame, 0, 1, 1);//Sobel边缘检测 imshow("123", frame); waitKey(10); }
相关文章推荐
- 计算机视觉与图像处理(一)——卷积与opencv
- 中北大学安卓实验室培训课程-计算机视觉(1) ——卷积与opencv
- 计算机视觉(1)——卷积与opencv
- opencv计算机视觉学习笔记一
- 【计算机视觉】OpenCV的最近邻开源库FLANN
- 【计算机视觉】OpenCV的最近邻开源库FLANN
- Opencv学习笔记_计算机视觉是什么?Opencv的起源
- [计算机视觉][ARM-Linux开发] Ubuntu14.04安装OpenCV3.2中遇到的问题的解决方案
- 【计算机视觉】基于OpenCV的人脸识别
- 玩转人工智能(7)计算机视觉OpenCV库持续深入学习总结
- 【计算机视觉】 多幅相机标定, 多相机标定(matlab/opencv)
- opencv3计算机视觉Python语言实现(原书第二版)第三章3.6节缺少BGRPortraCurveFilter()函数
- opencv计算机视觉学习笔记二
- 计算机视觉系列教程 (二)卷积与滤波详解
- 【计算机视觉】【OpenCV】OpenCV 3.X第一个python示例
- 计算机视觉_Opencv
- 【计算机视觉】OpenCV读取视频获取时间戳等信息(PS:经测试并不是时间戳,与FFMPEG时间戳不一样)
- 【计算机视觉】OPENCV对于有alpha通道的透明背景图片的读取和图片叠加
- 【VS开发】【计算机视觉】OpenCV读写xml文件《C++版本》
- 【计算机视觉】opencv姿态解算4 视觉导航 单目特征检测与实时位姿