【Python+OpenCV】圖片區域性區域畫素值處理(改進版)-一種特徵提取方法
阿新 • • 發佈:2019-01-08
上一個版本看這裡:《Python+OpenCV實現【圖片】區域性區域畫素值處理》
上個版本的程式碼雖然實現了我需要的功能,但還是走了很多彎路,我意識到圖片本就是陣列形式,對於8位灰度圖,通道數為1,它就是個二位陣列,這樣就沒有必要再設定ROI區域,複製出來這塊區域再迴圈提取畫素存入陣列進行處理了,可以直接將圖片存入陣列,再利用numpy進行切分相應的陣列操作就可以了,這樣一想就簡單很多了,這篇我會貼出修改後的程式碼,直接省去了大段的程式碼啊。
ps:這次我重新裝的opencv3.2.0版本,程式碼裡面直接用cv2了
# 檢視opencv版本,終端輸入:
$ pkg-config --modversion opencv
cv_img_cv2.py
# -*- coding:utf-8 -*-
__author__ = 'lwp'
import cv2
import numpy as np
import matplotlib.pyplot as plt
path ='/media/lwp/A/111111.jpg' # 圖片路徑
lwpImg = cv2.imread(path) # 載入圖片
gray_lwpImg = cv2.cvtColor(lwpImg, cv2.COLOR_BGR2GRAY) # 轉為灰度圖
# 畫目標區域,引數分別為圖片、左上座標、右下座標、框的顏色、框線條的粗細
lwpImg = cv2.rectangle(lwpImg, (290 , 0), (310, 327), (0, 255, 0), 2)
# 顯示標記後的圖片
cv2.imshow('local_pixel', lwpImg)
# 提取圖片畫素值到矩陣
pixel_data = np.array(gray_lwpImg)
# 提取目標區域
box_data = pixel_data[:, 290:310]
# 矩陣行求和
pixel_sum = np.sum(box_data, axis=1)
# 畫圖
x = range(576)
fig = plt.figure(figsize=(4, 2))
ax1 = fig.add_subplot(1, 1, 1)
ax1.bar(x, pixel_sum, width=1 ) # x為每個條形到x軸0點的距離,width為每個條的寬度
plt.xlabel('X')
plt.ylabel('Y')
plt.title('edge_filter')
plt.grid(True)
plt.show()
key = cv2.waitKey(0) & 0xFF
if key == ord('q'): # 按q關閉視窗
cv2.destroyAllWindows()