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軸同時旋轉。