gpt4 book ai didi

image - OpenCV : Transparent area of imported . png 文件现在是白色的

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:19 24 4
gpt4 key购买 nike

我正在尝试开发一个小型且简单的网络摄像头控制游戏,用户通过使用网络摄像头(例如手电筒)跟踪光源来在 x 轴上移动图形

到目前为止,我的代码每隔几秒就会在图片中的随机位置生成一个目标对象。该对象通过 Mat 存储为

Mat target = imread("target.png");

为了将对象绘制到背景图像上,我正在使用

bgClear.copyTo(temp);    
for(int i = targetX; i < target.cols + targetX; i++){
for(int j = targetY; j < target.rows + targetY; j++){
temp.at<Vec3b>(j,i) = target.at<Vec3b>(j-targetY,i-targetX);
}
}
temp.copyTo(bg);

其中 bgClear 代表干净的背景,temp 是正在编辑的背景副本,bg 是显示的最终背景。包括对象。
targetXtargetY 是对象的起始坐标(而 targetX 是预先随机生成的,因此对象会在图像上半部分的随机位置生成),相对到背景。 (所以我没有遍历整个背景,只遍历对象的范围)。

到目前为止它有效,但我有一个问题:导入图像的透明区域现在是白色,我似乎无法通过检查像素值来修复它,例如

       if(target.at<Vec3b>(Point(j-targetY,i-targetX))[0] != 255 &&
target.at<Vec3b>(Point(j-targetY,i-targetX))[1] != 255 &&
target.at<Vec3b>(Point(j-targetY,i-targetX))[2] != 255)

在我实际更换像素之前。

我也尝试通过添加 -1 标志(alpha channel ) 来加载 .png 文件,但是图像看起来很模糊,几乎看不到。

以防万一您无法想象我在说什么,这里是它的部分屏幕截图:Screenshot

关于如何解决这个问题有什么建议吗?

问候,丹尼尔

最佳答案

您需要手动处理透明度。一般的想法是,在复制到 temp 时只复制不透明的像素,即 alpha 值很高。

  1. imread 中使用 CV_LOAD_IMAGE_UNCHANGED (= -1) .
  2. 使用 splittarget 拆分为四个单 channel 图像.
  3. 使用 merge 合并前三个 channel 以形成 BGR 图像.
  4. 在绘制循环中,使用新形成的 BGR 图像作为源,使用未合并的第四 channel (alpha) 作为 mask 。

关于image - OpenCV : Transparent area of imported . png 文件现在是白色的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25979946/

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