gpt4 book ai didi

c++ - 使用 OpenCV 寻找最近的像素值

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:51 25 4
gpt4 key购买 nike

我想使用 C++ 使用 OpenCV 在帧中找到最近的 (R, G, B) 值。 (R, G, B) 值已给出。 OpenCV中有什么功能或解决方案吗?我在互联网上搜索但找不到。普通的解决方案会导致内存问题,而且工作速度很慢,因为我想找到 256 种不同的颜色。有什么建议或代码会很有帮助吗?

最佳答案

在下面,您将找到一个代码片段,它计算每个像素的 RGB 颜色值与您要查找的 RGB 值之间的 L1 距离。然后,它返回具有最小距离的像素的位置。

此代码只是一个示例,基于 RGB 值之间的 L1 距离。该距离不会反射(reflect)人类对色差的感知。如果您想找到与人眼看起来最相似的像素,则可以选择使用不同的距离。在 Color Difference 上查看此维基百科页面有关此类距离的列表。一旦你决定了其中一个,就可以很容易地修改下面的代码来使用那个距离而不是 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;

关于c++ - 使用 OpenCV 寻找最近的像素值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30560998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com