Opencv-python生成幻影坦克

 原理上参考了这篇博客https://blog.csdn.net/m0_46555380/article/details/114301348

原博为C#写的,这里使用了Python,opencv-python的版本为3.4.2.16

#  参考:https://blog.csdn.net/m0_46555380/article/details/114301348
#  当一个像素为白色背景时, 能够显示出一个特定的颜色 x , 当黑色背景时, 显示出 y
#  设: 颜色 x 的亮度为 xc, 颜色 y 的亮度为 yc, 这个像素的亮度为 zc, 不透明度为 za, 则满足:
#  xc = za * zc + (1 - za)
#  yc = za * zc
#  最终:
#  zc = yc / za      za = yc - xc + 1
#  考虑 ARGB通道值为0 ~ 255
#  zc = yc / (za / 255) = yc * 255 / za
#  za = yc - xc + 255
#  需要满足条件  xc >= yc

import cv2


def xc_max_than_yc(xc, yc, color_ratio=0.5):
    """令 xc > yc"""
    threshold = 255 * color_ratio
    xc = (xc / 255) * (255 - threshold) + threshold
    yc = (yc / 255) * threshold
    return xc, yc


def create_Mtank(white, black):
    """生成幻影坦克,条件是白底图的每个像素值大于黑底图的每个像素值"""
    za = black - white + 255
    zc = black.copy()
    idx = black != 0
    zc[idx] = black[idx] * 255 / za[idx]
    img = cv2.merge((zc, zc, zc, za))
    return img


white_path = "./img/1.jpg"  # 白底图
black_path = "./img/2.jpg"  # 黑底图
img_false = cv2.imread(white_path, 0)
img_true = cv2.imread(black_path, 0)
x, y = img_true.shape
img_false = cv2.resize(img_false, (y, x))
xc, yc = xc_max_than_yc(img_false, img_true)
cv2.imwrite("result.png", create_Mtank(xc, yc))

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值