一、 运行环境
我这里是Visual studio 2015 + OpenCV 4.0.1,OpenCV3以上的应该都可以。
二、 代码示例
1. 显示
//显示一张图片
void showImg()
{
const char* ImgPath = "AWVS1455.JPG";
const char* WindowName = "原图";
Mat img = imread(ImgPath);
if (img.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
//图片较大时可使用该函数设置窗口显示属性,因为默认属性可能导致图片显示不全
namedWindow(WindowName, WINDOW_NORMAL);
imshow(WindowName, img);
waitKey(0);
}
2. 腐蚀
//腐蚀一张图片
void ErodeImg()
{
const char* ImgPath = "2468.png";
const char* WindowName1 = "原图";
const char* WindowName2 = "效果图";
Mat SourceImage = imread(ImgPath);
if (SourceImage.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
imshow(WindowName1, SourceImage);
//该函数构造并返回可进一步传递给#腐蚀、#膨胀或#morphologyEx的结构化元素。也可以自己构造一个任意的二进制掩码,并将其用作结构化元素。
Mat element = getStructuringElement(MORPH_ELLIPSE, Size(10, 10));
Mat ResultImage;
erode(SourceImage, ResultImage, element);//使用指定的结构元素对源图像进行腐蚀
imshow(WindowName2, ResultImage);
waitKey(0);
}
3. 模糊
//模糊一张图片
void BlurImg()
{
const char* ImgPath = "1357.jpg";
const char* WindowName1 = "原图";
const char* WindowName2 = "效果图";
Mat SourceImg = imread(ImgPath);
if (SourceImg.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
//图片较大时可使用该函数设置窗口显示属性,因为默认属性可能导致图片显示不全
imshow(WindowName1, SourceImg);
Mat ResultImg;
//
blur(SourceImg, ResultImg, Size(5, 5));
imshow(WindowName2, ResultImg);
waitKey(0);
}
4. Canny边缘检测
//Canny边缘检测
void cannyImg()
{
//1. 载入原图
Mat srcImg = imread("1357.jpg");//读取原图
imshow("【原始图】Canny边缘检测", srcImg);//显示原图
Mat dstImage, edge, grayImage;//参数定义
//2. 创建与src同类型和大小的矩阵(dst)
dstImage.create(srcImg.size(), srcImg.type());
//3. 将原图像转换为灰度图像
cvtColor(srcImg, grayImage, COLOR_BGR2GRAY);
//4. 使用 3x3 内核来降噪
blur(grayImage, edge, Size(3, 3));
//5. 运行Canny算子
Canny(edge, edge, 3, 9, 3);
//6. 显示效果图
imshow("【效果图】Canny边缘检测", edge);
waitKey(0);
}
5. 然后main函数
int main(int argc, char* argv[])
{
cannyImg();
system("pause");
return 0;
}