opencv#36 图像距离变换

像素间距离

像素间的距离计算的是非零像素距离零像素的长度。

欧式距离
街区距离
棋盘距离

距离变换函数

distanceTransform()

cpp 复制代码
void cv::distanceTransform(InputArray   src,
                           OutputArray  dst,
                           int          distanceType,
                           int          maskSize,
                           int          dstType = CV_32F
                          )

·src:输入图像,数据类型为CV_8U的单通道图像。

·dst:输出图像,与输入图像具有相同尺寸,数据类型为CV_8U或者CV_32F的单通道图像。

·distanceType:选择计算两个像素之间距离方法的标志。

·maskSize:距离变换掩码矩阵大小,可以选择尺寸为DIST_MAASK_3(3*3),DIST_MASK_5(5*5)。

·dstType:输出图像的数据类型,可以是CV_8U或者CV_32F。

示例
cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>


using namespace cv; //opencv的命名空间
using namespace std;

//主函数
int main()
{
	//构建建议矩阵,用于求取像素之间的距离
	Mat a = (Mat_<uchar>(5, 5) << 1, 1, 1, 1, 1,
		1, 1, 1, 1, 1,
		1, 1, 0, 1, 1,
		1, 1, 1, 1, 1,
		1, 1, 1, 1, 1);
	Mat dist_L1, dist_L2, dist_C, dist_L12;

	//计算街区距离
	distanceTransform(a, dist_L1, 1, 3, CV_8U);
	cout << "街区距离" << endl << dist_L1 << endl;

	//计算欧式距离
	distanceTransform(a, dist_L2, 2, 5, CV_8U);
	cout << "欧式距离" << endl << dist_L2 << endl;

	//计算棋盘距离
	distanceTransform(a, dist_C, 3, 5, CV_8U);
	cout << "棋盘距离" << endl << dist_C << endl;


	cout << "对图像进行距离变换" << endl;
	waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出
	

	//对图像进行距离变换
	Mat img = imread("E:/opencv/opencv-4.6.0-vc14_vc15/opencv/hua.jpg");
	if (img.empty())
	{
		cout << "请确认图像文件名是否正确" << endl;
		return -1;
	}
	Mat hua, huaBW, huaBW_INV;
	cvtColor(img, hua, COLOR_BGR2GRAY);//转为灰度图像

	//将图像转为二值图像,同时把黑白区域颜色呼唤
	threshold(hua, huaBW, 25, 255, THRESH_BINARY);
	threshold(hua, huaBW_INV, 25, 255, THRESH_BINARY_INV);

	//距离变换
	Mat dist, dist_INV;
	distanceTransform(huaBW, dist, 1, 3, CV_32F);//数据类型设置为32F时,所有大于1的数将全部为白色
	distanceTransform(huaBW_INV, dist_INV, 1, 3, CV_8U);

	//显示变换结果
	imshow("huaBW", huaBW);
	imshow("dist", dist);
	imshow("huaBW_INV", huaBW_INV);
	imshow("dist_INV", dist_INV);

	waitKey(0);//等待函数用于显示图像,按下键盘任意键后退出
	return 0;
}
结果
相关推荐
实在智能RPA1 分钟前
金融行业财务审核自动化工具推荐:2026企业级AI Agent与智能合规选型指南
人工智能·ai·金融·自动化
热爱生活的五柒17 分钟前
深度学习大幅度提高准确率方法,本人亲测,调参方法,大幅度提升准确率方法(极其重要!!!多次看!0430)
人工智能·深度学习
FlagOS智算系统软件栈18 分钟前
众智 FlagOS Day0 实现 DeepSeek-V4 八芯适配:1.6T & 284B双模型,多元算力开箱即用
人工智能
Agent产品评测局19 分钟前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
kft131420 分钟前
AI 驱动测试 2.0:当测试智能体成为你的“超级 QA“
大数据·人工智能·elasticsearch
启效云27 分钟前
启效云战略升级:本体论落地 AI 原生应用智能体,打造中国版 Palantir 数字基座
人工智能·低代码·软件开发·低代码开发·零码化编辑器
jarvisuni27 分钟前
GLM5.1 降智了?国模思考强度研究!
人工智能·ai编程
IT_陈寒42 分钟前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端
www_comsci43 分钟前
【生物EI会议】2026年计算机技术与生物医学国际学术会议(CTBS 2026)
图像处理·神经网络·计算机视觉
亿信华辰软件1 小时前
睿治Agent数据治理平台重磅发布:数据治理大脑+全栈Agent,以AI重构数据治理全流程
大数据·人工智能