基于OpenCV实现的灰度图幻影坦克

news/2025/2/22 5:25:13/

对于png透明图片,在QQ,贴吧等平台上,看缩略图时默认是以白色为背景,而点开看原图时默认是以黑色为背景,基于此显示逻辑可以实现一种图像,看缩略图时是表图,看原图时是里图,这就是幻影坦克。

基于图像线性融合原理,公式:g(x)=α*f(x)+(1-α)h(x),可以假设最后生成图与白色叠加得到表图,最后生成图与黑色叠加得到里图,套用公式即可得到幻影坦克的理论公式:

公式和原理都源自B站视频,BV1kV411v7fR,讲的很细致。

需要注意的是,公式里α透明度有一项是表图的灰度值减里图灰度值,必须保证这个值时刻大于0,不然会出现α值大于255的情况,造成错误,即里图显示时出现表图部分,如图:

在我把背景换成橙色以后,图中错误部分也显示为橙色,所以判断为这些地方透明度计算出现问题。

 

经过初步分析得到:显示错误的地方在原图中的灰度值非常低,导致P表-P里小于0,使α超出上限,造成完全透明。

如何保证P表-P里大于0?我的想法是里图调暗一些,最后保证表图每一像素的灰度大于里图灰度即可。

经过一段时间的调试,我得到了我的解决办法:以里图尺寸为基准,遍历全部像素点,分别读取表图和里图的灰度,将读取到的里图灰度乘0.35,灰度的范围是0-255,因此最大值255*0.35=89.25。对于表图的灰度,如果出现小于上面这个值的灰度,就给他强行赋值为100,这样一定能够保证P表-P里大于0,α正常,里图显示正常。

可能会有人问:改变了表图灰度,会不会对最终结果造成影响?这个问题我还不清楚,但是根据生成的幻影坦克来看,这点影响可以忽略不计。

希望大神指点更好的方法以保证α不出问题。

最后附上源码

#include<opencv2/opencv.hpp>
#include<iostream>using namespace std;
using namespace cv;int main()
{Mat A_origin = imread("A.jpg", 0);Mat A;Mat B = imread("B.jpg",0);	resize(A_origin, A, B.size());				//以里图尺寸resize表图Mat C = Mat::zeros(B.size(), CV_8UC4);		//以里图尺寸为基础创建新图int PA, PB, PC;int Alpha;for (int i = 0; i < B.rows; i++){for (int j = 0; j < B.cols; j++){PA = (int)A.at<uchar>(i, j);PB = ((int)B.at<uchar>(i, j)) * 0.35;if (PA < 100)					//解决问题的关键{PA = 100;}Alpha = 255 - (PA - PB);		if (Alpha == 0)					{Alpha = 1;}PC = (int)(255 * PB / Alpha);C.at<Vec4b>(i, j) = Vec4b(PC, PC, PC, Alpha);}}imwrite("Mirage Tank.png", C);}

 

 


http://www.ppmy.cn/news/166116.html

相关文章

Opencv-python生成幻影坦克

原理上参考了这篇博客https://blog.csdn.net/m0_46555380/article/details/114301348 原博为C#写的&#xff0c;这里使用了Python&#xff0c;opencv-python的版本为3.4.2.16 # 参考&#xff1a;https://blog.csdn.net/m0_46555380/article/details/114301348 # 当一个像素…

360°幻影成像展示产品,带来逼真的视觉效果

数字展厅中出现了许多新技术&#xff0c;并且这些技术在数字展厅中的应用效果也是十分的出色&#xff0c;如360幻影成像。360幻影成像是全息投影衍生出来的新产品&#xff0c;被广泛的应用于商品展示、舞台表演、博物馆展览等等领域&#xff0c;让展示效果完美无瑕的体现出来&a…

Scratch实现正方形幻影效果

实现效果&#xff1a; 仔细观察&#xff0c;这个大的正方形由四个小的正方形组成。 先来画一个正方形吧~ 可以事先看看我之前写的博客。里面有不同的画图形的方法。 如何画各种图形 第一个正方形&#xff1a; 此时运行程序&#xff0c;查看效果如下&#xff1a; 我想聪明的你…

inter幻影峡谷安装ubuntu18.04

Ubuntu18.04安装各种问题解决思路 针对ubuntu在不同设备安转时可能出现的问题做一个罗列&#xff0c;方便以后安装时找思路 1 出现ACPI BIOS ERROR NUC11PHKI7C安装前出现的问题 现象说明&#xff1a;安装之前试用ubuntu之前出现这个问题&#xff0c;屏幕花屏类似于https:/…

「超级幻影猫2」专访:原汁原味和全新制造并不冲突

早前&#xff0c;一款带有几分马里奥影子&#xff0c;名为「超级幻影猫」的手游脱颖而出。虽然玩法轻便&#xff0c;但丝毫不影响该款游戏入选为App Store 2016年度十佳游戏。最近这款游戏推出续作啦&#xff01;「超级幻影猫2」延续了第一代作品的经典玩法并在此基础上进行了诸…

cocos creator | 用摄像机实现残影幻影拖尾效果

超级幻影了解一下&#xff1f; 基本原理 利用摄像机拍摄角色&#xff0c;然后投影到多个显示画布&#xff0c;给画布节点设置不同的透明度&#xff0c;最后让画布节点跟随角色移动。 创建角色和摄像机 创建一个新的typescript项目。 创建一个角色节点&#xff0c;并添加分组 ro…

python实现“幻影坦克”效果(点开图片是隐藏的另一张图)【详解】

开篇先附上实验成果。下图点击后会显示另一张图片&#xff0c;若不能正常显示&#xff0c;请另存到本地后&#xff0c;用QQ发送消息后打开&#xff0c;手机QQ效果最佳&#xff08;具体原因后面会解释&#xff09;。 下面我们先从原理说起&#xff0c;在PS中有三种算法如…

幻影粒子particleIllusion—简单做特效

查看-工程设置-舞台大小particles 分子emitters 发射器deflectors 偏向板遮挡板30格一秒工程保存 file—save 后缀.ipf 舞台 中间部分 舞台 背景右键 缩放等 &#xff0c;画范围删除 点箭头del红色反射器 右键结束&#xff08;可以当挡板&#xff09;—左下右键—弹性&#xff…