gpt4 book ai didi

c++ - 有没有简单的方法来突出面具?

转载 作者:太空狗 更新时间:2023-10-29 21:12:50 26 4
gpt4 key购买 nike

如果我有像这样的面具

我有一个图像(大小与蒙版相同)

Mathematica graphics

我想突出显示图像中的蒙版。如果我使用其他语言,我只是

如您所见,结果图像有一个透明的红色 显示 mask 。我希望在 OpenCV 中实现它。所以我写了这段代码

#include <opencv.hpp>

using namespace cv;
using namespace std;

int main() {
Mat srcImg = imread("image.jpg");
Mat mask = imread("mask.jpg", IMREAD_GRAYSCALE)>200;

for(int i=0;i<srcImg.rows;i++)
for(int j=0;j<srcImg.cols;j++)
if(mask.at<uchar>(i, j)==255)
circle(srcImg, Point(j,i), 3, Scalar(0, 0, 128,128));
imshow("image",srcImg);

waitKey();
return 0;
}

但是如您所见,我在 Scalar 中使用了 alpha 值,但它不是透明红色

也许这是因为 srcImg 只有 3 个 channel 。我有两个问题

  1. 如何用透明的红色高亮 mask (即使图像只有 3 个 channel )?
  2. 我必须逐个像素地绘制才能完成这件事吗?

最佳答案

#include<opencv2/core.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/highgui.hpp>

using namespace cv;

int main(int argc, char** argv)
{
Mat srcImg = imread("image.png");
Mat mask = imread("mask.png", IMREAD_GRAYSCALE) > 200;

Mat red;
cvtColor(mask, red, COLOR_GRAY2BGR);
red = (red - Scalar(0, 0, 255)) / 2;
srcImg = srcImg - red;

imshow("image", srcImg);

waitKey();
return 0;
}

enter image description here

关于c++ - 有没有简单的方法来突出面具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46103731/

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