日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python图像量化及采样处理

發布時間:2023/12/9 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python图像量化及采样处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 圖像量化
    • 圖像采樣
      • 局部馬賽克處理
    • 圖像金字塔
      • 向下取樣
      • 向上取樣

圖像量化

量化是將圖像像素點對應亮度的連續變化區間轉換為單個特定值的過程,即將原始灰度圖像的坐標空間幅度值離散化。
量化等級越多,圖像層次越豐富,灰度分辨率越高,圖像質量也越好。

import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('c.jpg') r1=np.zeros((img.shape[0],img.shape[1],3),np.uint8) r2=np.zeros((img.shape[0],img.shape[1],3),np.uint8) r3=np.zeros((img.shape[0],img.shape[1],3),np.uint8) #圖像量化等級為2的量化處理 for i in range(img.shape[0]):for j in range(img.shape[1]):for k in range(3):if img[i,j][k]<128:gray=0else:gray=128r1[i,j][k]=np.uint8(gray) #圖像量化等級為4的量化處理 for i in range(img.shape[0]):for j in range(img.shape[1]):for k in range(3):if img[i,j][k]<64:gray=0elif img[i,j][k]<128:gray=64elif img[i,j][k]<192:gray=128else:gray=192r2[i,j][k]=np.uint8(gray) #圖像量化等級為8的量化處理 for i in range(img.shape[0]):for j in range(img.shape[1]):for k in range(3):if img[i,j][k]<32:gray=0elif img[i,j][k]<64:gray=32elif img[i,j][k]<96:gray=64elif img[i,j][k]<128:gray=96elif img[i,j][k]<160:gray=128elif img[i,j][k]<192:gray=160elif img[i,j][k]<224:gray=192else:gray=224r3[i,j][k]=np.uint8(gray) plt.rcParams['font.sans-serif']=['SimHei'] titles=[u'(a)原始圖像',u'(b)量化-L2',u'(c)量化-L4',u'(d)量化-L8'] images=[img,r1,r2,r3] for i in range(4):plt.subplot(2,2,i+1)plt.imshow(images[i])plt.title(titles[i])#不顯示橫縱坐標plt.xticks([])plt.yticks([]) plt.show()

from cProfile import label from sys import flags import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('c.jpg') #將二維圖像轉換為一維圖像 data=img.reshape((-1,3)) data=np.float32(data) #停止迭代模式選擇: # cv2.TERM_CRITERIA_EPS--精確度(誤差)滿足epsilon,停止; # cv2.TERM_CRITERIA_MAX_ITER--迭代次數超過max_iter,停止; criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0) #初始中心選擇 #cv2.KMEANS_RANDOM_CENTERS--每次隨機選擇初始中心 #cv2.KMEANS_PP_CENTERS--使用kmeans++算法的中心初始化算法,即初始中心的選擇使眼色相差最大 flags=cv2.KMEANS_RANDOM_CENTERS #k-means聚類 compactness,labels,centers=cv2.kmeans(data,4,None,criteria,10,flags) #圖像轉換為uint8二維類型 centers=np.uint8(centers) res=centers[labels.flatten()] dst=res.reshape((img.shape)) img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB) dst=cv2.cvtColor(dst,cv2.COLOR_BGR2RGB) plt.rcParams['font.sans-serif']=['SimHei'] titles=[u'(a)原始圖像',u'(c)量化-L4'] images=[img,dst] for i in range(2):plt.subplot(1,2,i+1)plt.imshow(images[i])plt.title(titles[i])plt.xticks([])plt.yticks([]) plt.show()

圖像采樣

圖像采樣 處理是將一幅連續圖像在空間上分割成M*N個網格,每個網格用一個亮度值或灰度值來表示。
圖像采樣的間隔越大,所得圖像像素數越少,空間分辨率越低,圖像質量越差,甚至出現馬賽克效應。

import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('c.jpg') h=img.shape[0] w=img.shape[1] #采樣轉換成16*16區域 h1=h//16 w1=w//16 img1=np.zeros((h,w,3),np.uint8) for i in range(16):x=i*h1for j in range(16):y=j*w1#獲取填充顏色 左上角像素點b=img[x,y][0]g=img[x,y][1]r=img[x,y][2]for n in range(h1):for m in range(w1):img1[x+n,y+m][0]=np.uint8(b)img1[x+n,y+m][1]=np.uint8(g)img1[x+n,y+m][2]=np.uint8(r) cv2.imshow('img',img) cv2.imshow('img1',img1) cv2.waitKey(0) cv2.destoryAllWindows()

局部馬賽克處理

單擊鼠標,給鼠標拖動的區域打上馬賽克,按下ESC退出,按下s鍵可保存圖像至本地。

import cv2 import numpy as np import matplotlib.pyplot as plt img=cv2.imread('a.jpg') en=False #鼠標移動事件 def draw(event,x,y,flags,param):global en#鼠標左鍵單擊if event==cv2.EVENT_LBUTTONDOWN:en=True#鼠標移動且左鍵單擊elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_LBUTTONDOWN:if en:#調用函數打馬賽克drawMask(y,x)#鼠標左鍵釋放elif event==cv2.EVENT_LBUTTONUP:en=False #圖像局部采樣 def drawMask(x,y,size=10):for i in range(size):for j in range(size):img[x+i][y+j]=img[x][y] #創建窗口,自適應調整窗口大小來顯示圖像,且不能修改圖像 #WINDOW_AUTOSIZE:默認參數 cv2.namedWindow('img') #回調函數 cv2.setMouseCallback('img',draw) while(1):cv2.imshow('img',img)#按esc退出if cv2.waitKey(10)&0xFF==27:break#按s保存圖像elif cv2.waitKey(10)&0xFF==115:cv2.imwrite('save.png',img) cv2.destroyAllWindows()

圖像金字塔

圖像金字塔是指由一組圖像且不同分辨率的子圖集合,它是圖像多尺度表達的一種,以多分辨率來解釋圖像的結構,主要用于圖像的分割或壓縮。
生成金字塔主要包括兩種方式:向下取樣(圖像分辨率不斷降低的過程)、向上取樣(圖像分辨率不斷增大的過程)。

向下取樣

cv2.pyrDown(src,dst,…)

  • src:輸入圖像
  • dst:輸出圖像,和輸入圖像具有一樣的尺寸和類型
import cv2 img=cv2.imread('a.jpg') r1=cv2.pyrDown(img) r2=cv2.pyrDown(r1) r3=cv2.pyrDown(r2) cv2.imshow('img',img) cv2.imshow('r1',r1) cv2.imshow('r2',r2) cv2.imshow('r3',r3) cv2.waitKey(0) cv2.destroyAllWindows()

向上取樣

cv2.pyrUp(src,dst,…)

  • src:輸入圖像
  • dst:輸出圖像,和輸入圖像具有一樣的尺寸和類型
import cv2 img=cv2.imread('a.jpg') r1=cv2.pyrUp(img) cv2.imshow('img',img) cv2.imshow('r1',r1) cv2.waitKey(0) cv2.destroyAllWindows()

總結

以上是生活随笔為你收集整理的python图像量化及采样处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。