【发布时间】:2014-11-16 18:22:12
【问题描述】:
我正在尝试开发一个小型且简单的网络摄像头控制游戏,其中用户通过使用网络摄像头(例如手电筒)跟踪光源来在 x 轴上移动图形
到目前为止,我的代码每隔几秒钟就会在图片中的随机位置生成一个目标对象。 该对象通过
存储为 MatMat 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 表示最终显示的背景。
targetX 和 targetY 是对象的起始坐标(而 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 通道) 来加载 .png 文件,但是图像看起来很模糊,几乎看不到。
如果您对我所说的内容有疑问,这里是它的部分截图:Screenshot
关于如何解决这个问题的任何建议?
问候, 丹尼尔
【问题讨论】:
标签: image opencv png transparency alpha