OpenCV:改变像素的颜色

Posted

技术标签:

【中文标题】OpenCV:改变像素的颜色【英文标题】:OpenCV: Change colour of pixel 【发布时间】:2014-07-31 06:15:49 【问题描述】:

使用 OpenCV,我正在检测一张脸,检测这张脸的左右眼,并将眼睛提取到一个新的 Mat 图像中。然后我将眼睛图像颜色从 BGR 转换为 HSV。

我正在使用 inRange() 检查眼睛颜色是否在特定范围内。这会显示眼睛的红色区域(见下图)。

我的问题是:我想将眼睛颜色(使用 inRange() 检测)从红色更改为黑色。我不太确定从这里去哪里。

感谢任何帮助! 谢谢!


当前结果:

【问题讨论】:

将你的 inRange 掩码转换为 bgr,并使用掩码 bitwise_xor 眼睛 roi 谢谢@berak,会试一试的。 【参考方案1】:

如果你想让眼睛变成蓝色,你可以使用下面的 for 循环来做到这一点

cv::Vec3b pixelColor(255,0,0);
for(int y=0;y<img.rows;y++)
 for(int x=0;x<img.cols;x++)
  cv::Point2f point(x, y);
  if (mask.at<uchar>(point))  image.at<Vec3b>(cv::Point(x,y)) = pixelColor;
 

【讨论】:

感谢您的帮助,@diip-thomas。 image.at&lt;Vec3b&gt;(cv::Point(x,y)) = pixelColor; 这行给了我一个错误。【参考方案2】:

您已经有了掩码,只需执行一个 for 循环并将像素设置为黑色(.at = Vec3b(0,0,0),当然在 BGR 空间中),掩码为 255。

【讨论】:

谢谢@james-harper。我会为行和列实现一个 for 循环,然后……好吧,我现在迷失了,哈…… 将 diip_thomas 答案的第一行更改为 cv::Vec3b pixelColor(0,0,0);他混合了标量和向量。此外,您不必专门定义 Point2f,只需使用 at(y,x)、(y,x)。因为它是行主要的。

以上是关于OpenCV:改变像素的颜色的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV学习笔记3基础:图像基本操作

OpenCV学习笔记3基础:图像基本操作

OpenCV学习笔记3基础:图像基本操作

OpenCV学习笔记3基础:图像基本操作

android opencv 如何获得特定像素点的颜色

OpenCV 访问像素的颜色值