OpenCV像素分布

关于OpenCV的像素分布,和windows位图的分布很不相同。它是从左上角开始的,画个图便于记忆。

### 计算图像像素点间距离 在C++中利用OpenCV库计算两个像素点间的欧几里得距离可以通过获取各像素位置坐标并应用标准的距离公式来完成。对于灰度图而言,仅需考虑二维空间中的(x, y)坐标;而对于彩色图片,则还需纳入颜色维度考量。 #### 单纯基于坐标的两点间欧式距离计算 当只关心像素的空间分布而不涉及色彩差异时: ```cpp #include <opencv2/opencv.hpp> #include <cmath> double calculateSpatialDistance(cv::Point p1, cv::Point p2){ return sqrt(pow(p2.x - p1.x, 2) + pow(p2.y - p1.y, 2)); } ``` 此方法适用于任何类型的单通道或多通道图像,只要目标是比较它们的位置关系即可[^1]。 #### 考虑RGB分量的三维欧式距离 如果要综合评估两像素的颜色相似性和空间邻近性,在三通道彩图情况下可采用如下方式: ```cpp #include <opencv2/opencv.hpp> #include <cmath> // 假设输入的是BGR格式下的Vec3b类型变量代表三个不同通道强度值 cv::Scalar calculateColorAndSpaceDistance(const cv::Mat& img, const cv::Point& pt1, const cv::Point& pt2){ auto colorDiff = img.at<cv::Vec3b>(pt1) - img.at<cv::Vec3b>(pt2); double spatialDist = calculateSpatialDistance(pt1, pt2); // 返回一个包含R,G,B差值平方和以及空间距离的结果向量 return cv::Scalar( colorDiff.val[0]*colorDiff.val[0], colorDiff.val[1]*colorDiff.val[1], colorDiff.val[2]*colorDiff.val[2], spatialDist*spatialDist ); } void printDistanceInfo(const cv::Mat& resultVector){ printf("Red channel difference squared: %.2f\n", resultVector[0]); printf("Green channel difference squared: %.2f\n", resultVector[1]); printf("Blue channel difference squared: %.2f\n", resultVector[2]); printf("Euclidean distance between points (spatial): %.2f\n", sqrt(resultVector[3])); } ``` 上述代码片段展示了如何同时衡量两个给定点在色彩上的区别及其实际物理间隔,并最终输出这些信息以便进一步分析或可视化展示[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值