上手opencv图像处理:图像显示;图像腐蚀;图像模糊;canny边缘检测
一,图像显示
新版本opncv中,图像显示过程非常简单,只需要用imread函数载入到新版本的图像存储数据结构mat类中,然后用imshow函数显示即可,代码如下:
#include#include #include using namespace std; using namespace cv;//包含cv命名空间 int main() { cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件 Mat img = imread("E:/pictures/12.png");//载入图像 imshow("picture", img);//显示图像 waitKey(0);//等待任意按键按下 return 0; }
执行效果图:
二,图像腐蚀
作为opencv实现最为基本的形态学运算之一————腐蚀,即用图像中的暗色部分“腐蚀”掉图像中的高亮部分,代码如下:
#include//opencv highgui 头文件 #include //opencv 图像处理头文件 #include #include #include using namespace std; using namespace cv;//包含cv命名空间 int main() { cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件 Mat img = imread("E:/pictures/12.png");//载入图像 imshow("原图",img);//显示图像 //进行腐蚀操作 Mat element = getStructuringElement(MORPH_RECT, Size(15, 15)); Mat dstImage; erode(img,dstImage, element); //显示效果图 imshow("效果图:腐蚀操作", dstImage); waitKey(0);//等待任意按键按下 return 0; }
运行结果图:
三,图像模糊
即用Opencv对图像进行均值滤波操作。主要使用进行均值滤波操作的blur函数,代码如下:
#include//opencv highgui 头文件 #include //opencv 图像处理头文件 #include #include #include using namespace std; using namespace cv;//包含cv命名空间 int main() { cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件 Mat img = imread("E:/pictures/12.png");//载入图像 imshow("原图",img);//显示图像 //进行均值滤波操作 Mat dstImage; blur(img,dstImage, Size(7,7)); //显示效果图 imshow("效果图:均值滤波", dstImage); waitKey(0);//等待任意按键按下 return 0; }
运行结果如下:
四,canny边缘检测
即:载入图片,并将其转成灰度图,再用blur函数进行图像模糊以降噪,再用canny函数进行边缘检测,最后进行显示。
#include//opencv highgui 头文件 #include //opencv 图像处理头文件 #include #include #include using namespace cv;//包含cv命名空间 int main() { cv::utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT);//控制台不在输出日志文件 Mat img = imread("E:/pictures/12.png");//载入图像 imshow("原图",img);//显示图像 //进行均值滤波操作 Mat dstImage,edge,grayimage;//参数定义 //1,创建与img同类型和大小的矩阵(dst); dstImage.create(img.size(), img.type()); //2.将原图像转换为灰度图像 cvtColor(img, grayimage, COLOR_BGR2GRAY); //3.先使用3*3内核来降噪 blur(grayimage,edge, Size(3,3)); //4.运行canny算子 Canny(edge, edge, 3, 9, 3); //显示效果图 imshow("效果图:canny边缘检测", edge); waitKey(0);//等待任意按键按下 return 0; }
运行结果展示:



