opencv进行5种图像变化:ios
1、高斯噪声:git
#include<opencv2/opencv.hpp> #include<iostream> #include "../../opencv/build/include/opencv2/highgui/highgui_c.h" using namespace cv; using namespace std; void gaussian_noise(Mat& image); int main(int artc, char** argv) { Mat src = imread("E:/日出.jpg"); namedWindow("高斯日出", CV_WINDOW_AUTOSIZE); imshow("高斯日出", src); gaussian_noise(src); waitKey(0); return 0; } void gaussian_noise(Mat& image) { Mat noise = Mat::zeros(image.size(), image.type()); randn(noise, (15, 15, 15), (30, 30, 30)); Mat dst; add(image, noise, dst); imshow("gaussian noise", dst); }
2、图像腐蚀:算法
#include<opencv2/highgui/highgui.hpp> //opencv highgui模块头文件 #include<opencv2/imgproc/imgproc.hpp> //opencv 图像处理头文件 #include<opencv2/opencv.hpp> using namespace cv; using namespace std; int main() { Mat image = imread("E:/日出.jpg"); imshow("原图", image); Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));//调用getStructuringElement,参数形式见下 Mat dstimage; erode(image, dstimage, element); //调用erode,参数形式见下 imshow("腐蚀图", dstimage); waitKey(0); return 0; }
函数调用:ui
getStructuringElement:Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
参数形式:第一个参数表示内核的形状,有三种能够选择:矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE; 第二个参数表示内核的尺寸。spa
erode:erode(image, dstimage, element);
参数形式:第一个参数表示原图像,第二个参数表示目标图像,第三个参数表示腐蚀操做的内核(调用getStructuringElement)code
3、图像模糊:token
#include<opencv2/opencv.hpp> #include<highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件 using namespace cv; using namespace std; int main() { Mat srcImage = imread("E:/日出.jpg"); imshow("原图", srcImage); //均值滤波操做 Mat dstImage; blur(srcImage, dstImage, Size(10, 10));//调用blur,参数形式见下 imshow("模糊图", dstImage); waitKey(0); return 0; }
函数调用:
blur:blur(srcImage, dstImage, Size(10, 10));
参数形式:第一个参数表示原图,第二个参数表示目标图,第三个参数表示内核的大小,通常这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。
4、canny边缘检测:
#include<opencv2/opencv.hpp> #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件 using namespace cv; using namespace std; int main() { Mat srcImage = imread("E:/日出.jpg"); imshow("原图", srcImage); //参数定义 Mat edge, grayImage; //步骤一:将原图像转化为灰度图像 cvtColor(srcImage,grayImage,COLOR_BGR2GRAY);//调用cvtColor,参数形式见下 //步骤二:先使用3x3内核来降噪 blur(grayImage, edge, Size(3, 3));//调用blur,参数形式见下 //步骤三:运行canny算子 Canny(edge, edge, 3, 9, 3);//调用Canny,参数形式见下 imshow("效果图", edge); waitKey(0); return 0; }
调用函数:
cvtColor:cvtColor(srcImage,grayImage,COLOR_BGR2GRAY);
参数形式:第一个参数表示原图,第二个参数表示目标图,第三个参数COLOR_BGR2GRAY表示灰度图;
blur:blur(grayImage, edge, Size(3, 3));
参数形式:第一个参数表示原图,第二个参数表示目标图,第三个参数表示内核的大小,通常这样写Size( w,h )来表示内核的大小( 其中,w 为像素宽度, h为像素高度)。
Canny:Canny(edge, edge, 3, 9, 3);
参数形式:第一个参数表示输入图像,这个必须是单通道的,即灰度图。第二个参数表示输出边缘图像 ,也是单通道的,可是是黑白的。第三个参数表示第一个阈值;第四个参数表示第二个阈值。第五个参数表示算子内核大小 。Canny 算法发现输入图像的边缘并且在输出图像中标识这些边缘。两个阈值中小阈值用来控制边缘链接,大的阈值用来控制强边缘的初始分割。
五:镜像:
#include<opencv2/opencv.hpp> #include<opencv2/imgproc/imgproc.hpp>//图像处理头文件 using namespace cv; using namespace std; int main() { Mat srcImage = imread("E:/日出.jpg"); imshow("原图", srcImage); //参数定义 Mat dstImage1,dstImage2,dstImage3; flip(srcImage, dstImage1, -1);//调用flip,参数形式见下 //flip(srcImage, dstImage1, 0); //flip(srcImage, dstImage1, 1); imshow("效果图", dstImage1); waitKey(0); return 0; }
函数调用:
flip:flip(srcImage, dstImage1, -1);
参数形式:第一个参数表示原图,第二个参数表示目标图,第三个参数是旋转类型,0表明x轴旋转,任意正数表明y轴旋转,任意负数表明x和y轴同时旋转。