您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python+OpenCV圖片局部區(qū)域像素值處理的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
背景故事:我需要對(duì)一張圖片做一些處理,是在圖像像素級(jí)別上的數(shù)值處理,以此來反映圖片中特定區(qū)域的圖像特征,網(wǎng)上查了很多,大多關(guān)于opencv的應(yīng)用教程帖子基本是停留在打開圖片,提取像素重新寫入圖片啊之類的基本操作,我是要取圖片中的特定區(qū)域再提取它的像素值,作為一個(gè)初學(xué)者開始接觸opencv簡(jiǎn)直一臉懵,慢慢摸索著知道了opencv的一些函數(shù)是可以實(shí)現(xiàn)的像SetImageROI()函數(shù)設(shè)置ROI區(qū)域,即感興趣區(qū)域,就很好用啊,總之最后是實(shí)現(xiàn)了自己想要的功能。現(xiàn)在看個(gè)程序確實(shí)是有點(diǎn)挫,也有好多多余的沒必要的代碼,但畢竟算一次碼代碼的歷程,就原模原樣貼在這里吧。
代碼功能:在python下用opencv
打開圖片并顯示并重新寫入新的文件
提取圖片特定區(qū)域的像素值(根據(jù)自己需求,下面在代碼中注解)
對(duì)提取出來的像素值做處理用matplotlib顯示成條形圖
源碼貼在下面:
# -*- coding:utf-8 -*- __author__ = 'lwp' import cv2.cv as cv import numpy as np import matplotlib.pyplot as plt # 文件路徑 path = '/media/lwp/A/4.bmp' # 載入一張圖片,參數(shù)cv.CV_LOAD_IMAGE_GRAYSCALE為打開為灰度圖 lwpImg = cv.LoadImage(path, cv.CV_LOAD_IMAGE_GRAYSCALE) # 創(chuàng)建圖像空間,參數(shù)為size, depth, channels,這里設(shè)置的是圖片等高寬30個(gè)像素的一個(gè)區(qū)域,8位,灰度圖 box_lwpImg = cv.CreateImage((30, 576), 8, 1) # 創(chuàng)建窗口 cv.NamedWindow('test1', cv.CV_WINDOW_AUTOSIZE) cv.NamedWindow("box_test1", cv.CV_WINDOW_AUTOSIZE) # 設(shè)置ROI區(qū)域,即感興趣區(qū)域,參數(shù)為x, y, width, heigh cv.SetImageROI(lwpImg, (390, 0, 30, 576)) # 提取ROI,從lwpImg圖片的感興趣區(qū)域到box_lwpImg cv.Copy(lwpImg, box_lwpImg) # 對(duì)box區(qū)域進(jìn)行循環(huán)提取像素值存到列表pixel_list中 pixel_list = [] for i in range(576): # 576為box的高 for j in range(30): # 30為box的寬 x = box_lwpImg[i, j] pixel_list.append(x) # 提取的像素值轉(zhuǎn)為int整型賦給一維數(shù)組pixel_list_np_1 pixel_list_np_1 = np.array(pixel_list, dtype=int) # 轉(zhuǎn)為576*30的二位數(shù)組,即按圖片box排列 pixel_list_np_2 = np.array(pixel_list_np_1).reshape(576, 30) # 行求和,得到576個(gè)值,即每行的像素信息 pixel_sum = np.sum(pixel_list_np_2, axis=1) # 取消設(shè)置 cv.ResetImageROI(lwpImg) # 畫目標(biāo)區(qū)域 lwpImg = cv.Rectangle(lwpImg, (390, 0), (425, 576), (0, 255, 0), 2) # 顯示圖像 cv.ShowImage('test1', lwpImg) # 查看列表list長(zhǎng)度,以確定像素值提取準(zhǔn)確 list_length = len(pixel_list) print list_length # 查看數(shù)組維度,shape驗(yàn)證 print pixel_list_np_1.ndim print pixel_list_np_1.shape print pixel_list_np_1 print pixel_list_np_2.ndim print pixel_list_np_2.shape print pixel_list_np_2 print pixel_sum # 畫條形圖 plt.figure(1) width = 1 for i in range(len(pixel_sum)): plt.figure(1) plt.bar(i, pixel_sum[i], width) plt.xlabel("X") plt.ylabel("pixel_sum") plt.show() # 按ESC退出,按s保存圖片 k = cv.WaitKey(0) if k == 27: # wait for ESC key to exit cv.DestroyAllWindows() elif k == ord('s'): # wait for 's' key to save and exit cv.WriteFrame('copy_test.png', lwpImg) cv.DestroyAllWindows()
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Python+OpenCV圖片局部區(qū)域像素值處理的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。