opencv进行5种图像变化:
一、高斯噪声:
#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);
}
二、图像腐蚀:
#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;
}
函数调用:
getStructuringElement:Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
参数形式:第一个参数表示内核的形状,有三种可以选择:矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE; 第二个参数表示内核的尺寸。
erode:erode(image, dstimage, element);
参数形式:第一个参数表示原图像,第二个参数表示目标图像,第三个参数表示腐蚀操作的内核(调用getStructuringElement)
三、图像模糊:
#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为像素高度)。
四、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轴同时旋转。