当前位置 : 主页 > 编程语言 > python >

python-opencv实现抖动算法

来源:互联网 收集:自由互联 发布时间:2022-06-24
抖动算法简单介绍 简单说就是牺牲分辨率来提高颜色数量。 通过黑点的疏密程度来进行灰度的显示。 例如墨水屏幕只能显示黑白,那么我们可以取样一部分区域矩,例如2x2的一个矩阵

抖动算法简单介绍

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

原图:
python-opencv实现抖动算法_灰度_02

处理后的图像: python-opencv实现抖动算法_灰度值_03

这里只定义的2x2的矩阵,因为我想在 128x64的屏幕上进行显示,实际上是我想多了,我的屏幕分辨率太小了,即使牺牲的分辨率很小了还是没什么效果


作者:Hello_wshuo​


上一篇:python安装第三方库换源
下一篇:没有了
网友评论