python opencv制作隐藏图片
前言
隐藏图片就是在白色背景和黑色背景显示出不同的图片,之前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制作隐藏图片的更多相关文章
- Python+Opencv实现把图片转为视频
1. 安装Opencv包 在Python命令行输入如下命令(如果你使用的Anaconda,直接进入Anaconda Prompt键入命令即可.如果你不知道Anaconda是什么,可以参考王树义老师的文 ...
- Python OpenCV ——Matplotlib显示图片
Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will ...
- Python opencv计算批量图片的BGR各自的均值
#coding:utf-8 #第一种方式 很慢很慢 自己写的如何计算均值 ''' import cv2 import os def access_pixels(frame): print(frame. ...
- python opencv show图片,debug技巧
debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...
- RPi 2B python opencv camera demo example
/************************************************************************************** * RPi 2B pyt ...
- Python + opencv 实现图片文字的分割
实现步骤: 1.通过水平投影对图形进行水平分割,获取每一行的图像: 2.通过垂直投影对分割的每一行图像进行垂直分割,最终确定每一个字符的坐标位置,分割出每一个字符: 先简单介绍一下投影法:分别在水平和 ...
- Python OpenCV图片转视频 工具贴(三)
Python OpenCV图片转视频 粘贴即用,注意使用时最好把自己的文件按照数字顺序命名.按照引导输入操作. # 一键傻瓜式引导图片串成视频 # 注意使用前最好把文件命名为数字顺序格式 import ...
- 【10】python窗口控制[隐藏,移动]
步骤一:下载小软件,如下图 该软件用于提取需要控制程序窗口的具体信息 二.程序代码 #__author:"**佳" #date: 2018/10/20 0020 #function ...
- 基于OpenCV制作道路车辆计数应用程序
基于OpenCV制作道路车辆计数应用程序 发展前景 随着科学技术的进步和工业的发展,城市中交通量激增,原始的交通方式已不能满足要求:同时,由于工业发展为城市交通提供的各种交通工具越来越多,从而加速了城 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
随机推荐
- Redis变慢?深入浅出Redis性能诊断系列文章(三)
(本文首发于"数据库架构师"公号,订阅"数据库架构师"公号,一起学习数据库技术,助力职业发展) 本篇为Redis性能问题诊断系列的第三篇,主要从Redis服务层 ...
- 【设计模式】Java设计模式 - 模板模式
Java设计模式 - 模板模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...
- Django 聚合查询 分组查询 F与Q查询
一.聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数 ...
- Django 使用Pycharm 创建工程
一.Pycharm 创建Django 工程 事实上,我们一般不使用命令行,而是直接在Pycharm 中创建Django 项目. Pycharm 是进行Django 开发的最佳 IDE,请大家自行安装, ...
- k8s日志架构和基本日志
如果一个容器崩溃了.一个Pod被驱逐了.或者一个节点停机了,您通常仍然需要访问您应用程序的日志.为此,您需要一个生命周期与节点.Pod.容器相对独立的存储空间来存储应用程序日志和系统日志. 此时,我们 ...
- Logstash:导入zipcode CSV文件和Geo Search体验
- 通过使用nginx来实现logstash的负载均衡
文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106813223 总结: nginx配置,192.168.0.5 user nginx ...
- 从应用访问Pod元数据-DownwardApi的应用
对于某些需要调度之后才能知道的数据,比如 pod 的 ip,主机名,或者 pod 自身的名称等等,k8s 依旧很贴心的提供了 Downward API 的方式来获取此类数据,并且可以通过环境变量或者文 ...
- 如何生成均匀随机数 C++
#include <iostream> #include <fstream> #include <cstdlib> #include <ctime> u ...
- <jsp:useBean>动作的使用
jsp:useBean动作的使用 jsp:useBean动作用于在指定的范围内寻找指定名称的JavaBean对象,如果找到,则返回该对象的引用可以操作里边的属性.如果没有找到则重新实例化一个对象.并且 ...