二、OpenCV自学笔记:图片的复制、显示、腐蚀、模糊、边缘检测

一、 运行环境

我这里是Visual studio 2015 + OpenCV 4.0.1,OpenCV3以上的应该都可以。

二、 代码示例

1. 复制

	Mat src = Mat::zeros(1, 10, CV_8UC1);

	Mat dst = src;//浅拷贝
	Mat dst1, dst2;
	src.copyTo(dst1);//深拷贝
	dst2 = src.clone();//深拷贝

	for (int i = 0; i < src.rows; i++) {
		for (int j = 0; j < src.cols; j++) {
			src.at<uchar>(i, j) = 255;//修改矩阵内容
		}
	}
	cout << "src \t" << src << endl;
	cout << "dst \t" << dst << endl;
	cout << "dst1 \t" << dst1 << endl;
	cout << "dst2 \t" << dst2 << endl;

 从结果可以很直观的看出赋值运算符只是做了浅拷贝,而两个拷贝的接口则是深拷贝

2. 显示

//显示一张图片
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);
}

3. 腐蚀

//腐蚀一张图片
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);
}

4. 模糊

//模糊一张图片
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);
}

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

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值