基于OpenCV实现的灰度图幻影坦克
对于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);}
基于OpenCV实现的灰度图幻影坦克相关推荐
- opencv遍历实现灰度图转伪彩色图[C/C++][附applyColorMap方法]
灰度图转伪彩色图 数字图像处理的作业,利用opencv实现通过灰度隐射将灰度图转化为伪彩色图. 效果大概如下,在最后附带opencv自带函数处理的方法 原图 遍历图 opencv的 applyColo ...
- OpenCV调用摄像头+灰度图+高斯滤波+Canny算子
来把opencv经常要用的一些函数来梳理一下 效果图震楼 惯例opencv配置环境地址:https://blog.csdn.net/aidam_bo/article/details/81132918 ...
- [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- Matlab与C/C++混合编程 (基于Opencv库)
之前用过基于VS2018 与MATLAB2018a 混合编程(C++特性)(见https://blog.csdn.net/wwwoowww/article/details/83013801),奈何后来 ...
- 一组基于OpenCV的图像处理函数
本文在根据 Getting Started with OpenCV 给出的对于OpenCV使用介绍进行整理,以备之后的学习和工程应用. 下面给出了一系列的对于小白应用OpenCV进行初步指导的博文 ...
- Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法
Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录
- cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...
- python彩虹图_灰度图转伪彩色图和彩虹图,基于OpenCV 2.4.3
做东西需要用到灰度转伪彩显示,毕竟嘛,人眼对彩色的分辨远远高于对灰度的分辨. 本来想这么成熟的东西网上肯定有代码,我勒个擦,找了一圈都是不知所云的东西,还是自己写一个吧!!!! 废话不说了,代码是码农 ...
- matlab灰度图转伪彩色,[转载]灰度图转伪彩色图和彩虹图,基于OpenCV 2.4.3
做东西需要用到灰度转伪彩显示,毕竟嘛,人眼对彩色的分辨远远高于对灰度的分辨. 本来想这么成熟的东西网上肯定有代码,我勒个擦,找了一圈都是不知所云的东西,还是自己写一个吧!!!! 废话不说了,代码是码农 ...
最新文章
- Open XML 已成为ISO标准
- 零基础自学html5要多久?Web前端学习路线的6点建议
- 【LeetCode】剑指 Offer 60. n个骰子的点数
- 企业付款php 接口,微信企业付款接口PHP开发需要注意的两个地方
- 虚拟 IP原理(动态 IP 、固定 IP 、实体 IP)
- 一起来作画吧「GitHub 热点速览 v.22.14」
- Ansible 运维自动化 ( 配置管理工具 )
- Linux tar命令无法执行,Linux执行tar解压报错tar: Error is not recoverable: exiting now
- Android图片颜色混合算法
- C#:实现Zhang Suen细化算法(附完整源码)
- lc滤波电路电感电容值选择_几种常见的无源滤波电路
- 世界上最好的图片无损压缩软件
- windows_server2008操作系统切换语言
- 【Java】微信企业付款报错:java.io.IOException: toDerInputStream rejects tag type 45
- “博客无双”第二期拍卖活动将于2011年1月26日14:00开始
- “2019·中国云计算和物联网大会”来袭,多个亮点
- ubuntu c语言调用串口,ubuntu 下使用串口工具(呕心沥血整理调试成功)
- win10 下安装 neo4j
- 游戏本天梯_实况足球手游国服5月天梯胜率榜+极品补丁一枚
- 深度学习与人类语言处理学习笔记(一)—— 语音识别(理论篇)