抖动算法简单介绍

简单说就是牺牲分辨率来提高颜色数量。
通过黑点的疏密程度来进行灰度的显示。
例如墨水屏幕只能显示黑白,那么我们可以取样一部分区域矩,例如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实现抖动算法的更多相关文章

  1. Python+opencv 图像拼接

    1.http://www.cnblogs.com/skyfsm/p/7411961.html ,给出了很好地拼接算法实现 2.由于不是Python的,所以简单做了一些翻译转成Python+opencv ...

  2. 【python+opencv】直线检测+圆检测

     Python+OpenCV图像处理—— 直线检测 直线检测理论知识: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进 ...

  3. linux/ubuntu下最简单好用的python opencv安装教程 ( 解决 imshow, SIFT, SURF, CSRT使用问题)

    希望这篇文章能彻底帮你解决python opencv安装和使用中的常见问题. 懒人请直奔这一节, 一条命令安装 opencv 使用python-opencv常用的问题 在linux中使用python版 ...

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

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

  5. python+opencv实现车牌定位

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  6. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  7. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

  8. [0x00 用Python讲解数据结构与算法] 概览

    自从工作后就没什么时间更新博客了,最近抽空学了点Python,觉得Python真的是很强大呀.想来在大学中没有学好数据结构和算法,自己的意志力一直不够坚定,这次想好好看一本书,认真把基本的数据结构和算 ...

  9. OpenCV实现KNN算法

    原文 OpenCV实现KNN算法 K Nearest Neighbors 这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K个最近邻以给出该样本的相应值.这种方 ...

  10. .NET + OpenCV & Python + OpenCV 配置

    最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...

随机推荐

  1. Gitea 与 Jenkins 的集成实践,打造你的专属 CI/CD 系统

    前言 Gitea 是一个用于代码托管的轻量级单体程序,它能与现有的经典应用集成,诸如代码分析工具 SonarQube.持续集成工具 Drone.Jenkins 以及用于工单管理的客户端插件(VSCod ...

  2. Django 之必知必会三板斧

    一.HttpResponse 在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据. 1 在 a ...

  3. 讲讲 tcp_tw_recycle,tcp_tw_reuse

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485332&idx=1&sn=59823ce1 ...

  4. jenkins邮箱配置

  5. Prometheus高可用部署

    Prometheus的本地存储给Prometheus带来了简单高效的使用体验,可以让Promthues在单节点的情况下满足大部分用户的监控需求.但是本地存储也同时限制了Prometheus的可扩展性, ...

  6. JSP实现登录功能(页面带样式)

    功能要求 1.完成两个页面 2.第一个登陆页面login. jsp 3.第二个用户管理页面useManage. jsp 4.有登录功能(能进行用户名密码的校验,用户名若为自己的学号密码为班级号,允许登 ...

  7. aws-cli命令-vpcs及subnets相关的查询

    关于AWS上vpcs及subnets相关的查询,常用的命令如下: # 查询所有的vpc信息 aws ec2 describe-vpcs --output json # 查询所有所有的subnet相关的 ...

  8. acwing346 走廊泼水节 (最小生成树)

    完全图就是每两个点都有直接相连的边. 模拟Kruskal算法的过程,每选择一条边加入时,他两端端点在同一个集合中就跳过,否则考虑合并两个集合,合并时需要增加的每条边的权值至少是edge[i]+1,这才 ...

  9. Vue学习之--------绑定样式、条件渲染、v-show和v-if的区别(2022/7/12)

    文章目录 1.绑定样式 1.1 基础知识 1.2 代码实例 1.3 测试效果 2.条件渲染 2.1 基本知识 2.2 代码实例 2.3 测试效果 1.绑定样式 没啥好说的.我觉得还没直接引入外部写好的 ...

  10. [Oracle]复习笔记-SQL部分内容

    Oracle笔记--SQL部分 整体框架 语句的执行顺序:from →where →group by→having→select→order by select * from * where * gr ...