本文基于OpenCV介绍一些简单的图像处理,帮助新人快速上手OpenCV。由于Chen学知有限,错误的地方欢迎大家纠正。同时有什么疑惑也可在下方留言,看到会在第一时间作出回复。
本文涉及:图像显示、腐蚀、模糊、Canny边缘检测等一些简单的图像处理。
//图像显示
#include
#include
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("test.png");
if (!src.data)
{
printf("未载入图片!请指定正确的文件路径。");
return -1;
}
namedWindow("【原图】", 0);
imshow("【原图】", src);
waitKey(0);
return 0;
}
Mat getStructuringElement(int shape, Size esize, Point anchor = Point(-1, -1));
其中shape为内核的形状,有三种形状可供选择,分别为矩形:MORPH_RECT、交叉形:MORPH_CROSS、椭圆形:MORPH_ELLIPSE。void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
其中src为原始图像,通道数不限,depth必须为CV_8U,CV_16U,CV_16S,CV_32F或CV_64F。//腐蚀操作
#include
#include
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("test.png");
if (!src.data)
{
printf("未载入图片!请指定正确的文件路径。");
return -1;
}
//namedWindow("【腐蚀操作 原图】", 0);
imshow("【腐蚀操作 原图】", src);
Mat element = getStructuringElement(MORPH_RECT,Size(5,5));
Mat dst;
erode(src, dst, element);
//namedWindow("【腐蚀操作 效果图】", 0);
imshow("【腐蚀操作 效果图】", dst);
waitKey(0);
return 0;
}
void blur( InputArray src, OutputArray dst,
Size ksize, Point anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT );
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。该函数对通道是独立处理的,且可以处理任意通道数的图片,但需要注意,待处理的图片深度应该为CV_8U, CV_16U, CV_16S, CV_32F 以及 CV_64F之一。//图像模糊
#include
#include
using namespace std;
using namespace cv;
int main()
{
Mat src = imread("Kirky.jpg");
if (!src.data)
{
printf("未载入图片!请指定正确的文件路径。");
return -1;
}
//namedWindow("【模糊操作 原图】", 0);
imshow("【模糊操作 原图】", src);
Mat dst;
blur(src, dst, Size(5, 5));
imshow("【模糊操作 效果图】", dst);
waitKey(0);
return 0;
}
void Canny( InputArray image, OutputArray edges,
double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false );
与先前一样,image为源图像,edges为目标图像,这里输出的是边缘图像。//canny边缘检测
#include
#include
using namespace cv;
using namespace std;
int main()
{
Mat src = imread("Kirky.jpg");
if (!src.data)
{
printf("未正确载入图片!请指定正确的文件路径。");
return -1;
}
imshow("【canny边缘检测 原图】", src);
Mat image, grayImage, edges;
image.create(src.size(), src.type());
//1、将原图转成灰度图
cvtColor(src, grayImage, COLOR_BGR2GRAY);
//2、使用(3*3)内核降噪
blur(grayImage, image, Size(3, 3));
//3、运行Canny算子
Canny(image, edges, 3, 9, 3);
imshow("【canny边缘检测 效果图】", edges);
waitKey(0);
return 0;
}