抖动算法简单介绍

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

通过这种方法就可以牺牲掉一半的分辨率(其实是1/4),来显示出5个级别的灰度,当然如果扩大取样矩阵可以获得更多级别的灰度,同时也有牺牲很大的分辨率。
取样的矩阵为nxn,显示颜色灰度的级别一共有 (nxn+1),那么正常的灰度级别为256级,也就是最大取样16x16的矩阵就够用了。

代码实现

  1. import cv2
  2. import numpy as np
  3. import sys
  4. img = cv2.imread("input.jpg",0)
  5. height,width = img.shape
  6. if height % 2 != 0:
  7. height -= 1
  8. if width % 2 != 0:
  9. width -= 1
  10. if height > width:
  11. img=np.rot90(img)
  12. height,width = width,height
  13. k_size = 2
  14. def change(gray,img):
  15. step = int(255/(k_size*k_size+1))
  16. k1 = range(0,step)
  17. k2 = range(step,2*step)
  18. k3 = range(2*step,3*step)
  19. k4 = range(3*step,4*step)
  20. k5 = range(4*step,255+1)
  21. if gray in k1:
  22. img[0][0] = 0
  23. img[0][1] = 0
  24. img[1][0] = 0
  25. img[1][1] = 0
  26. if gray in k2:
  27. img[0][0] = 0
  28. img[0][1] = 0
  29. img[1][0] = 255
  30. img[1][1] = 0
  31. if gray in k3:
  32. img[0][0] = 0
  33. img[0][1] = 255
  34. img[1][0] = 255
  35. img[1][1] = 0
  36. if gray in k4:
  37. img[0][0] = 0
  38. img[0][1] = 255
  39. img[1][0] = 255
  40. img[1][1] = 255
  41. if gray in k5:
  42. img[0][0] = 255
  43. img[0][1] = 255
  44. img[1][0] = 255
  45. img[1][1] = 255
  46. for h in range(0,height,k_size):
  47. for w in range(0,width,k_size):
  48. gray = int(sum([img[h][w],img[h][w+1],img[h+1][w],img[h+1][w+1]])/(k_size*k_size)) # 计算2x2矩阵中灰度平均值
  49. temp = img[h:h+2,w:w+2] # 取样
  50. change(gray,temp) # 将取样的矩阵根据其灰度值进行处理
  51. ret,img=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
  52. # img = cv2.resize(img,(128,64))
  53. cv2.imwrite("output.jpg",img)
  54. cv2.imshow("title",img)
  55. cv2.waitKey(0)
  56. 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. haodoop新特性

    Hadoop2.x新特性 scp实现两个远程主机之间的文件复制 scp -r hello.txt root@hadoop103:/user/atguigu/hello.txt // 推 push sc ...

  2. Python使用tesserocr识别文字过程中遇到的一个问题

    最近在使用Python识别PNG图像中包含的文字时遇到一个问题.解决过程记录如下. (Python使用tesserocr的安装过程不再描述.) 在使用tesserocr识别PNG图像中的文字时,如果P ...

  3. kvm命令管理虚拟机

    virsh 既有命令行模式,也有交互模式,在命令行直接输入 virsh 就进入交互模式, virsh 后面跟命令参数,则是命令行模式: KVM 工具集合 libvirt:操作和管理KVM虚机的虚拟化 ...

  4. k8s控制器和Pod Template的关系

    Pod 本身并不能自愈(self-healing).如果一个 Pod 所在的 Node (节点)出现故障,或者调度程序自身出现故障,Pod 将被删除:同理,当因为节点资源不够或节点维护而驱逐 Pod ...

  5. alertmanager配置文件详解

    global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' #用于邮件通知的P发件人 route: #每个 ...

  6. Fluentd部署:错误排查

    介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent.l ...

  7. 内网横向渗透 之 ATT&CK系列一 win7的yxcms

    Yxcms渗透 前言 通过phpMyAdmin慢日志查询Getshell后,蚁剑连接,发现win7下面还有个cms靶场,于是就兴致勃勃的去打了一波. cms渗透 进入页面后,搜刮了页面所有可见信息,发 ...

  8. SQL通用语法和SQL分类

    SQL通用语法 1.SQL 语句可以单行或多行书写,以分号结尾 2.可使用空格和缩进来增强语句的可读性 3.MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写 4.3种注释 单行注释: - ...

  9. PAT (Basic Level) Practice 1004 成绩排名 分数 20

    读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 2 行:第 1 个学生的 ...

  10. useEffect 和 useLayoutEffect浅析

    执行时期的区别 useEffect 回调函数的执行时期 useEffect为异步执行,执行时期为 触发状态更新(如:setState,forceUpdate) React渲染函数执行(render) ...