python-opencv实现抖动算法
抖动算法简单介绍
简单说就是牺牲分辨率来提高颜色数量。
通过黑点的疏密程度来进行灰度的显示。
例如墨水屏幕只能显示黑白,那么我们可以取样一部分区域矩,例如2x2的一个矩阵,来显示5个级别的灰度,用4个像素当成一个像素来看,就会有5个级别的灰度。

通过这种方法就可以牺牲掉一半的分辨率(其实是1/4),来显示出5个级别的灰度,当然如果扩大取样矩阵可以获得更多级别的灰度,同时也有牺牲很大的分辨率。
取样的矩阵为nxn,显示颜色灰度的级别一共有 (nxn+1),那么正常的灰度级别为256级,也就是最大取样16x16的矩阵就够用了。
代码实现
import cv2
import numpy as np
import sys
img = cv2.imread("input.jpg",0)
height,width = img.shape
if height % 2 != 0:
height -= 1
if width % 2 != 0:
width -= 1
if height > width:
img=np.rot90(img)
height,width = width,height
k_size = 2
def change(gray,img):
step = int(255/(k_size*k_size+1))
k1 = range(0,step)
k2 = range(step,2*step)
k3 = range(2*step,3*step)
k4 = range(3*step,4*step)
k5 = range(4*step,255+1)
if gray in k1:
img[0][0] = 0
img[0][1] = 0
img[1][0] = 0
img[1][1] = 0
if gray in k2:
img[0][0] = 0
img[0][1] = 0
img[1][0] = 255
img[1][1] = 0
if gray in k3:
img[0][0] = 0
img[0][1] = 255
img[1][0] = 255
img[1][1] = 0
if gray in k4:
img[0][0] = 0
img[0][1] = 255
img[1][0] = 255
img[1][1] = 255
if gray in k5:
img[0][0] = 255
img[0][1] = 255
img[1][0] = 255
img[1][1] = 255
for h in range(0,height,k_size):
for w in range(0,width,k_size):
gray = int(sum([img[h][w],img[h][w+1],img[h+1][w],img[h+1][w+1]])/(k_size*k_size)) # 计算2x2矩阵中灰度平均值
temp = img[h:h+2,w:w+2] # 取样
change(gray,temp) # 将取样的矩阵根据其灰度值进行处理
ret,img=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
# img = cv2.resize(img,(128,64))
cv2.imwrite("output.jpg",img)
cv2.imshow("title",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
原图:

处理后的图像: 
这里只定义的2x2的矩阵,因为我想在 128x64的屏幕上进行显示,实际上是我想多了,我的屏幕分辨率太小了,即使牺牲的分辨率很小了还是没什么效果
python-opencv实现抖动算法的更多相关文章
- Python+opencv 图像拼接
1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...
- 【python+opencv】直线检测+圆检测
Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...
- linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)
希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题. 懒人请直奔这一节, 一条命令安装 opencv 使用python-opencv常用的问题 在linux中使用python版 ...
- 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化
一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...
- python+opencv实现车牌定位
写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
- [0x00 用Python讲解数据结构与算法] 概览
自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...
- OpenCV实现KNN算法
原文 OpenCV实现KNN算法 K Nearest Neighbors 这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K个最近邻以给出该样本的相应值.这种方 ...
- .NET + OpenCV & Python + OpenCV 配置
最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...
随机推荐
- STL再回顾(非常见知识点)
目录 为人熟知的pair类型 再谈STL 迭代器的使用 常用的STL容器 顺序容器 vector(向量) 构造方式 拥有的常用的成员函数(java人称方法) string 构造方式 成员函数 dequ ...
- 三分钟,带你了解PLM
PLM应用于单一地点或者多个地点的企业内部.以及在产品研发领域具有协作关系的企业之间的.支持产品全生命周期的信息的创建.管理.分发和应用的综合性的应用解决方案,能够集成与产品相关的流程.应用系统和信息 ...
- 传输层协议(tcp ip和udp 三次握手 四次握手)
1 TCP/IP协议介绍 TCP/IP协议:Transmission Control Protocol/Internet Protocol 传输控制协议/因特网互联协议. TCP/IP是一个Proto ...
- 干货分享|使用 Istio 实现灰度发布
Kubernetes 作为基础平台,提供了强大的容器编排能力.但是在其上部署业务和服务治理上,仍然会面对一些复杂性和局限性.在服务治理上,已经有许多成熟的 ServiceMesh 框架用于扩充其能力, ...
- day01-项目开发流程
多用户即时通讯系统01 1.项目开发流程 2.需求分析 用户登录 拉取在线用户列表 无异常退出(包括客户端和服务端) 私聊 群聊 发文件 服务器推送新闻/广播 3.设计阶段 3.1界面设计 用户登录: ...
- Django 运行报异常:AttributeError: 'str' object has no attribute 'get'
Technorati Tags: Python,Django,Web 在使用django.contrib.auth用户机制进行用户的验证.登录.注销操作时,遇到这个异常. 首先是写了一个登录的视图,要 ...
- kubernetes1.20 部署 traefik2.3
一.概述 Traefik 是一个开源的可以使服务发布变得轻松有趣的边缘路由器.它负责接收你系统的请求,然后使用合适的组件来对这些请求进行处理. 除了众多的功能之外,Traefik 的与众不同之处还在于 ...
- 使用Logstash把MySQL数据导入到Elasticsearch中
总结:这种适合把已有的MySQL数据导入到Elasticsearch中 有一个csv文件,把里面的数据通过Navicat Premium 软件导入到数据表中,共有998条数据 文件下载地址:https ...
- 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...
- Libgdx游戏学习(1)——环境配置及demo运行
原文: Libgdx游戏学习(1)--环境配置及demo运行 - Stars-One的杂货小窝 Libgdx游戏是基于Java的一款游戏引擎,可以发布Android,桌面端,Html,IOS等游戏,出 ...