C++ OpenCV:更改像素的颜色

C++ OpenCV:更改像素的颜色,c++,opencv,mat,hsv,eye-detection,C++,Opencv,Mat,Hsv,Eye Detection,使用OpenCV,我检测一张脸,检测该脸的左眼和右眼,并将眼睛提取到新的Mat图像中。然后我将眼睛图像颜色从BGR转换为HSV 我正在使用inRange()检查眼睛颜色是否在一定范围内。这将显示眼睛的红色区域(参见下图) 我的问题是:我想将眼睛颜色(使用inRange()检测)从红色更改为黑色。我不太确定接下来该怎么办 感谢您的帮助! 谢谢 当前结果: 你已经有了遮罩,只需做一个for循环,并将像素设置为黑色(.at=Vec3b(0,0,0),当然在BGR空间中),其中遮罩是255。如果你想

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

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

我的问题是:我想将眼睛颜色(使用inRange()检测)从红色更改为黑色。我不太确定接下来该怎么办

感谢您的帮助! 谢谢


当前结果:


你已经有了遮罩,只需做一个for循环,并将像素设置为黑色(.at=Vec3b(0,0,0),当然在BGR空间中),其中遮罩是255。

如果你想让眼睛变蓝,你可以用下面的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;
 }
}
cv::Vec3b像素颜色(255,0,0);

for(int y=0;y将你的inRange蒙版转换为bgr,然后用maskThanks@berak对眼睛roi进行位异或,这将是一个尝试。谢谢@james harper。我会为行和列实现for循环,然后……好的,我现在迷失了自己,哈……将diip_thomas的答案的第一行更改为cv::Vec3b pixelColor(0,0);他混合了标量和向量。另外,你不必特别定义点2f,只需在(y,x),(y,x)处使用。因为它是行主键。谢谢你的帮助,@diip thomas。行
image.at(cv::Point(x,y))=pixelColor;
给了我一个错误。