寻找最接近的像素值与OpenCV
Finding Nearest Pixel Value with OpenCV
我想在使用OpenCV的c++中找到最接近的(R, G, B)值。给出了(R, G, B)值。在OpenCV中有任何功能或解决方案吗?我在网上搜索,但我找不到。普通的解决方案会导致内存问题,而且运行速度很慢,因为我想找到256种不同的颜色。有什么建议或代码会很有帮助吗?
下面,您将发现一个代码片段,它计算每个像素的RGB颜色值与您寻找的RGB值之间的L1距离。然后,返回距离最小的像素的位置。
这段代码只是一个例子,基于RGB值之间的L1距离。距离并不反映人类对色差的感知。如果你想找到一个看起来最像人眼的像素,你应该选择一个距离。查看维基百科关于色差的页面,了解这些距离的列表。一旦选定了一个,就可以很容易地修改下面的代码,使用这个距离而不是L1。如果您的应用程序非常简单,那么您可以使用下面的代码。
// RGB values of the color you are looking for
int r = 0;
int g = 0;
int b = 255;
// Load image
cv::Mat img = cv::imread("image.png");
// Split image into channels
cv::Mat channels[3];
cv::split(img, channels);
// Find absolute differences for each channel
cv::Mat diff_r;
cv::absdiff(channels[2], r, diff_r);
cv::Mat diff_g;
cv::absdiff(channels[1], g, diff_g);
cv::Mat diff_b;
cv::absdiff(channels[0], b, diff_b);
// Calculate L1 distance
cv::Mat dist = diff_r + diff_g + diff_b;
// Find the location of pixel with minimum color distance
cv::Point minLoc;
cv::minMaxLoc(dist, 0, 0, &minLoc);
// Get the color of a pixel at minLoc
cout << img.at<cv::Vec3b>(minLoc) << endl;
相关文章:
- OpenCV 像素访问点与 at() - 不同的值
- OpenCV-如何将vale添加到图像一部分的所有像素
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 在OpenCV中设置像素值(奇怪的结果)
- OpenCV 访问像素的颜色值
- 如何在OpenCV Cuda(GpuMat)中访问像素
- 如何使用 openCV 更改图像每个像素的颜色
- 如何在灰色区域增长明亮像素?OpenCV C++
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 为什么OpenCV返回像素强度的奇怪值
- 遍历区域并在 OpenCV 中获取平均像素值
- 如何使用opencv在不丢失像素的情况下对图像进行去扭曲
- opencv::Mat,从原始数据中获取像素值
- 在OpenCV中像素化实现
- 在 OpenCV 和 C++ 中查找距轮廓中心最近的黑色像素
- OpenCv,Android:无法编辑转换为HLS色彩空间的相机帧像素
- 如何在opencv C++中访问特定的超像素
- OpenCV从2D像素获取3D坐标
- OpenCV像素操作有时不起作用
- OpenCV 像素化算法