opencv进行5种图像变化:

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);
}

效果图:https://raw.githubusercontent.com/zhengmuhe/deep-learning/master/%E9%AB%98%E6%96%AF%E5%99%AA%E5%A3%B0.jpg?token=AMAQWVH6WXUNNCRF4BG5OCK42K5X6

二、图像腐蚀:

#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;
}

效果图:https://raw.githubusercontent.com/zhengmuhe/deep-learning/master/%E5%9B%BE%E5%83%8F%E8%85%90%E8%9A%80.jpg?token=AMAQWVBTK3SCGNROA3WVFHS42K55O

函数调用:

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;
}

效果图:https://raw.githubusercontent.com/zhengmuhe/deep-learning/master/%E5%9B%BE%E5%83%8F%E6%A8%A1%E7%B3%8A.jpg?token=AMAQWVEYUQ4HVBZCOMU6NMS42K6BI

函数调用:

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;
}

效果图:https://raw.githubusercontent.com/zhengmuhe/deep-learning/master/canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B.jpg?token=AMAQWVG6G4OZILYBYIEU2XC42K6EY

调用函数:

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;
}

效果图:https://raw.githubusercontent.com/zhengmuhe/deep-learning/master/%E9%95%9C%E5%83%8F.jpg?token=AMAQWVDWNEJVIACZ6GODPC242K6LA

函数调用:

flip:flip(srcImage, dstImage1, -1);

参数形式:第一个参数表示原图,第二个参数表示目标图,第三个参数是旋转类型,0代表x轴旋转,任意正数代表y轴旋转,任意负数代表x和y轴同时旋转。

上一篇:opencv 学习


下一篇:图像元素遍历