opencv程序设计一

1图像显示

#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
	Mat Image = imread("F:\\1.jpg");   //读取图片内容
	imshow("显示图片", Image);         //将图片输出出去

	waitKey(6000);

	return 0;
}

2图像腐蚀

腐蚀是提取的是内核覆盖下的相素最小值。背景变细,黑色区域变大。进行 腐蚀 操作的函数是 erode 它接受了三个参数:
src: 原图像
erosion_dst: 输出图像
element: 腐蚀操作的内核。 如果不指定,默认为一个简单的 3x3 矩阵。否则,我们就要明确指定它的形状,可以使用函数 getStructuringElement:
Mat element = getStructuringElement( erosion_type,
Size( 2erosion_size + 1, 2erosion_size+1 ),
Point( erosion_size, erosion_size ) );
我们可以为我们的内核选择三种形状之一:
矩形: MORPH_RECT
交叉形: MORPH_CROSS
椭圆形: MORPH_ELLIPSE
然后,我们还需要指定内核大小,以及 锚点 位置。不指定锚点位置,则默认锚点在内核中心位置。

#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>

using namespace cv;
int main()
{
	Mat image = imread("F:\\1.jpg");

	imshow("原始图片", image);

	//进行腐蚀操作 
	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	Mat dstImage;
	erode(image, dstImage, element);
		
	
	imshow("【效果图】腐蚀操作", dstImage);
	waitKey(60000);

	return 0;
}

3均值滤波

消除使用归一化图像框过滤器。使用内核函数方法消除图像:
在这里插入图片描述


#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
using namespace cv;


int main()
{
	//【1】载入原始图
	Mat srcImage = imread("F:\\1.jpg");

	//【2】显示原始图
	imshow("【原图】", srcImage);

	//【3】进行均值滤波操作
	Mat dstImage;
	blur(srcImage, dstImage, Size(7, 7));
	imshow("均值滤波", dstImage);

	Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
	erode(srcImage, dstImage, element);
	imshow("腐蚀操作", dstImage);

	waitKey(600000);
}

在这里插入图片描述

4CANNY边缘检测

Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法, 最优边缘检测的三个主要评价标准是:
    低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。
    高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。
    最小响应: 图像中的边缘只能标识一次

1、消除噪声。 使用高斯平滑滤波器卷积降噪。 显示了一个 size = 5 的高斯内核示例:
在这里插入图片描述
2、计算梯度幅值和方向。 此处,按照Sobel滤波器的步骤:
(1)运用一对卷积阵列 (分别作用于 x 和 y 方向):
在这里插入图片描述
(2)使用下列公式计算梯度幅值和方向:
在这里插入图片描述梯度方向近似到四个可能角度之一(一般 0, 45, 90, 135)
3、非极大值 抑制。 这一步排除非边缘像素, 仅仅保留了一些细线条(候选边缘)。
4、滞后阈值: 最后一步,Canny 使用了滞后阈值,滞后阈值需要两个阈值(高阈值和低阈值):
(1)如果某一像素位置的幅值超过 高 阈值, 该像素被保留为边缘像素。
(2)如果某一像素位置的幅值小于 低 阈值, 该像素被排除。
( 3)如果某一像素位置的幅值在两个阈值之间,该像素仅仅在连接到一个高于 高 阈值的像素时被保留。
Canny 推荐的 高:低 阈值比在 2:1 到3:1之间。

#include <opencv2/opencv.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;

//-----------------------------------【main( )函数】--------------------------------------------
//		描述:控制台应用程序的入口函数,我们的程序从这里开始
//-------------------------------------------------------------------------------------------------
int main()
{
	//【0】载入原始图  
	Mat srcImage = imread("F:\\2.jpg");  
	imshow("【原始图】", srcImage); 	//显示原始图 
	Mat dstImage, edge, grayImage;	//参数定义

	//【1】创建与src同类型和大小的矩阵(dst)
	dstImage.create(srcImage.size(), srcImage.type());

	//【2】将原图像转换为灰度图像

	//此句代码的OpenCV2版为:
	cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);

	//【3】先用使用 3x3内核来降噪
	blur(grayImage, edge, Size(3, 3));

	//【4】运行Canny算子
	Canny(edge, edge, 3, 9, 3);

	//【5】显示效果图 
	imshow("【效果图】Canny边缘检测", edge);

	waitKey(0);

	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值