前言

隐藏图片就是在白色背景和黑色背景显示出不同的图片,之前qq可以显示,现在好像也不行了,原因就是原来的qq,在发出来默认是白色背景,而点开后是黑色背景。但是这个原理还是挺有意思的,所以简单的研究了一下

隐藏图原理

参考文章
原理参考文章里面说的很详细了,这里不多赘述。
一个要注意的一点是,在黑色背景显示的图片需要进行一下处理,否者效果及其不好,就是降低对比度,并提高亮度(为了在白色背景下隐藏的更好),这一点也是文章没有提到的。

代码实现

import time
import cv2
import numpy as np
import sys Wimg = cv2.imread('1.jpg') #白色背景显示的图片 Wimg为white-img缩写
Wimg = cv2.cvtColor(Wimg,cv2.COLOR_BGR2GRAY)
Wimg = cv2.cvtColor(Wimg,cv2.COLOR_GRAY2BGRA) Bimg = cv2.imread('2.jpg') #黑色背景显示的图片 Bimg为black-img缩写
Bimg = cv2.cvtColor(Bimg,cv2.COLOR_BGR2GRAY)
Bimg = cv2.cvtColor(Bimg,cv2.COLOR_GRAY2BGRA) h1,w1 = Wimg.shape[:2]
h2,w2 = Bimg.shape[:2]
h = min([h1,h2])
w = min([w1,w2])
# 奇数列行,为了交错排列两张图片
if h % 2 == 0:
h -= 1
if w % 2 == 0:
w -= 1 # 降低对比度,并提高亮度
Bimg = cv2.addWeighted(Bimg,0.3,0,0,100) Wimg = cv2.resize(Wimg,(w,h))
Bimg = cv2.resize(Bimg,(w,h))
Rimg = np.zeros([h,w,4],dtype=np.uint8)
flag = True
print(h,w)
for y in range(h):
for x in range(w):
if flag:
# 显示白色图片
Rimg[y,x] = Wimg[y,x]*0.3
Rimg[y,x,3] = 255-Wimg[y,x,0]
flag = False
else:
# 显示黑色图片
Rimg[y,x] = Bimg[y,x]
Rimg[y,x,3] = Bimg[y,x,0]
flag = True cv2.imwrite('result.png',Rimg, [cv2.IMWRITE_PNG_COMPRESSION, 0])

效果查看

我这里直接用 gimp 新建图层来看效果,这样效果也会更加明显。
白色背景显示的图片:

黑色背景显示的图片:

python opencv制作隐藏图片的更多相关文章

  1. Python+Opencv实现把图片转为视频

    1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...

  2. Python OpenCV ——Matplotlib显示图片

    Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will ...

  3. Python opencv计算批量图片的BGR各自的均值

    #coding:utf-8 #第一种方式 很慢很慢 自己写的如何计算均值 ''' import cv2 import os def access_pixels(frame): print(frame. ...

  4. python opencv show图片,debug技巧

    debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...

  5. RPi 2B python opencv camera demo example

    /************************************************************************************** * RPi 2B pyt ...

  6. Python + opencv 实现图片文字的分割

    实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...

  7. Python OpenCV图片转视频 工具贴(三)

    Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...

  8. 【10】python窗口控制[隐藏,移动]

    步骤一:下载小软件,如下图 该软件用于提取需要控制程序窗口的具体信息 二.程序代码 #__author:"**佳" #date: 2018/10/20 0020 #function ...

  9. 基于OpenCV制作道路车辆计数应用程序

    基于OpenCV制作道路车辆计数应用程序 发展前景 随着科学技术的进步和工业的发展,城市中交通量激增,原始的交通方式已不能满足要求:同时,由于工业发展为城市交通提供的各种交通工具越来越多,从而加速了城 ...

  10. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

随机推荐

  1. java项目中VO、DTO以及Entity,各自是在什么情况下应用的

    按照标准来说: entity里的每一个字段,与数据库相对应 vo里的每一个字段,是和你前台页面相对应 dto,这是用来转换从entity到dto,或者从dto到entity的中间的东西 举个例子: h ...

  2. 【疑难杂症】关于pycharm无法安装插件显示网络错误问题

    今天实在受不了英文的pycharm了,想着赶紧装个中文的插件,结果插件界面给我说我网络有问题 search results are not loaded check the internet conn ...

  3. DirectPV-----文章内容有待进一步实践完善

    GitHub文档地址:https://github.com/minio/directpv DirectPV是用于直连存储的CSI驱动程序.从更简单的意义上讲,它是一个分布式持久卷管理器,而不是像SAN ...

  4. mysql8 安装与配置文件添加时区

    mysql默认时区选择了CST mysql>show variables like '%time_zone%'; 解决办法:(建议通过修改配置文件来解决) 通过命令在线修改: mysql> ...

  5. Docker 容器日志管理

    Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志. 一 .Docker 引擎日志 Docker 引擎日志一般是交给了 ...

  6. 3_JSP

    一. 引言 1.1 现有问题 在之前学习Servlet时, 服务器通过Servlet响应客户端页面, 有什么不足之处? 开发方式麻烦: 继承父类, 覆盖方法, 配置web.xml或注解 代码修改麻烦: ...

  7. .NET6 JWT(生成Token令牌)

    一.Net 6环境下的.net core项目里如何使用JWT. 第一步,在Nuget引入JWT.Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGe ...

  8. bilibili弹幕爬虫

    import random import requests import jieba import numpy as np from lxml import etree class SpiderBil ...

  9. 学习ASP.NET Core Blazor编程系列五——列表页面

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  10. CentOS 7.9 安装 MySQL 5.7.35

    CentOS 7.9 安装 MySQL 5.7.35 1 下载地址:https://downloads.mysql.com/archives/community/ 2 mysql5.7.35 安装包上 ...