opencv作为计算机视觉,在读取和显示图片的基础上,我们来做一些简单的图像变换试试。
1.将一幅图片平滑处理
2.创建一副宽度和高度为输入图像一半尺寸的图像
3.边缘检测将输出一个单通道图像
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
#include "highgui.h"
void smooth(Mat image);
void CreateImage(Mat image);
void canny(Mat image);
Mat src, dst;
int main(int argc, char **argv) {
/// 载入原图像
src = imread("C:\\Users\\joy\\Pictures\\11.png", 1);
//smooth(src);
//CreateImage(src);
canny(src);
}
/*对图像做简单的平滑处理
方法:对传进来的图片每个像素点3*3区域做高斯平滑*/
void smooth(Mat image) {
cvNamedWindow("Example4-in");//创建两个窗口
cvNamedWindow("Example4-out");
imshow("Example4-in", image);//把加载的图片image在example4-in窗口中显示
dst = src.clone();
//平滑处理,输入,输出,高斯,3*3
GaussianBlur(image, dst, Size(3, 3), 0, 0);
imshow("Example4-out", dst);
cvWaitKey(0);//等待按键
cvDestroyWindow("Example4-in");//销毁窗口
cvDestroyWindow("Example4-out");
}
//创建一副宽度和高度为输入图像一半尺寸的图像
void CreateImage(Mat image) {
cvNamedWindow("Example4-in");//创建两个窗口
cvNamedWindow("Example4-out");
imshow("Example4-in", image);//把加载的图片image在example4-in窗口中显示
dst.create(image.rows, image.cols , image.type());
pyrDown(image, dst, Size(image.cols / 2, image.rows / 2));
imshow("Example4-out", dst);
cvWaitKey(0);//等待按键
cvDestroyWindow("Example4-in");//销毁窗口
cvDestroyWindow("Example4-out");
}
/*边缘检测将输出一个单通道图像*/
void canny(Mat image) {
cvNamedWindow("Example4-in");//创建两个窗口
cvNamedWindow("Example4-out");
imshow("Example4-in", image);//把加载的图片image在example4-in窗口中显示
//创建与src同类型和同大小的矩阵
dst = src.clone();
//将原始图转化为灰度图
cvtColor(image,dst,COLOR_BGR2GRAY);
//先使用3*3内核来降噪
blur(dst, dst, Size(3, 3));
//运行canny算子
Canny(dst, dst, 3, 9, 3);
imshow("Example4-out", dst);
cvWaitKey(0);//等待按键
cvDestroyWindow("Example4-in");//销毁窗口
cvDestroyWindow("Example4-out");
}