1. 程式人生 > >【Python+OpenCV】圖片區域性區域畫素值處理(改進版)-一種特徵提取方法

【Python+OpenCV】圖片區域性區域畫素值處理(改進版)-一種特徵提取方法

上一個版本看這裡:《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()

這裡寫圖片描述