Python 對圖片做垂直投影
本文利用opencv對圖片進行垂直投影,做出垂直投影圖,大體思路:打開圖片,灰度化,二值化,按列進行統計,新建一個大小和原圖一樣的圖片,按列進行填充:
- cv2.cv.Get2D(cv2.cv.fromarray(img), y, x) 獲取物理坐標為(y,x)處的灰度值
- cv2.cv.Set2D(cv2.cv.fromarray(img), y, x,(255, 255, 255)) 設置某一位置處rgb值
實現
例如:
# -*-coding:utf-8-*- import cv2 import numpy as np # 灰度化讀取圖片 image = cv2.imread('10.bmp', 0) # cv2.imshow('aa',image) # cv2.waitKey(0) # 將圖片二值化 retval, img = cv2.threshold(image, 170, 255, cv2.THRESH_BINARY_INV) # cv2.imshow('aa',img) # cv2.waitKey(0) # 創建一個空白圖片(img.shape[0]為height,img.shape[1]為width) paintx = np.zeros(img.shape, np.uint8) # 將新圖像數組中的所有通道元素的值都設置為0 cv2.cv.Zero(cv2.cv.fromarray(paintx)) # 創建width長度都為0的數組 w = [0] * image.shape[1] print w # 對每一行計算投影值 for x in range(image.shape[1]): for y in range(image.shape[0]): t = cv2.cv.Get2D(cv2.cv.fromarray(img), y, x) if t[0]== 0: w[x] += 1 # 繪制垂直投影圖 for x in range(image.shape[1]): for y in range(w[x]): # 把為0的像素變成白 cv2.cv.Set2D(cv2.cv.fromarray(paintx), y, x,(255, 255, 255)) # 顯示圖片 cv2.namedWindow('image', cv2.WINDOW_NORMAL) cv2.imshow('image',paintx) cv2.imwrite('image.jpg',paintx) cv2.waitKey(0)