python-opencv-matlab影象處理介面關係
1、說明
caffe框架由C++編寫,其還提供python和matlab介面呼叫。而caffe的影象讀取與儲存是利用opencv實現,因此需要梳理影象在不同介面中的轉換關係,方便不同介面下的資料傳輸與儲存。
- 關鍵點:影象檔案在記憶體中的儲存形式是連續儲存的。如果是3通道RGB影象,則其在記憶體中儲存的格式為
r1g1b1,r2g2b2,r3g3b3.........
2、影象讀取及轉換
2.1 python直接呼叫影象
python利用matplotlib庫可直接讀入、顯示、儲存影象。
已知影象大小為(height,width,channel)=(194,295,3);
import matplotlib.pyplot as plt
pyimg=plt.imread('HappyFish.jpg')
plt.imshow(pyimg)
plt.show()
檢視讀入的資料型別及大小如下:
print type(pyimg)
print pyimg.shape
可知,python儲存影象資料的資料型別為numpy.ndarray型別,資料存放模式為(height,width,channel)=(194,259,3);
(0,0)處的畫素值關係如下:
print pyimg[0,0]
從上圖可以看出,(0,0)處的畫素值如上。
2.2 python利用opencv呼叫影象
import cv2
cvimg=cv2.imread('HappyFish.jpg')
cv2.imshow("wnd",cvimg)
cv2.waitKey(0)
資料型別及資料呼叫如下:
print type(cvimg)
print cvimg.shape
print cvimg[0,0]
可以看出,opencv的python介面同樣是採用numpy.ndarray型別儲存畫素值,儲存方式依然是【height,width,channel】,此種存放模式方便影象畫素值索引,如【0,0】可直接呼叫三個通道的資料。
- 雖然開啟的同樣一個影象,但是在用 matplotlib讀取的時候與cv2讀取,在【0,0】處的畫素值是不同的,原因是opencv讀影象的時候,畫素在記憶體中的儲存的順序為BGR,而python中為RGB。
2.3 python與opencv 資料之間轉換
利用opencv 讀入影象,利用matplotlib顯示影象
import cv2
cvimg=cv2.imread('HappyFish.jpg')
plt.imshow(cvimg)
plt.show()
影象顯示異常,主要是應為opencv將影象畫素的儲存順序改為BRG,而python預設顯示影象格式為RGB.為了顯示正常,可執行如下操作:
#方法1
import cv2
cvimg=cv2.imread('HappyFish.jpg')
b,g,r=cv2.split(cvimg)
rgb=cv2.merge([r,g,b])
plt.imshow(rgb)
plt.show()
#方法2
rgb=cv2.cvtColor(cvimg,cv2.COLOR_BGR2RGB)
plt.imshow(rgb)
plt.show()
#方法3
rgb=cvimg[:,:,::-1]
plt.imshow(rgb)
plt.show()
3、numpy多維陣列相關操作
python中,影象資料儲存的資料格式為numpy.ndarray,因此有必要了解相關操作,特別是transpose和reshape操作。
3.1 reshape
tt=np.arange(24)
/*array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
*/
t1=tt.reshape(2,3,4)
/*
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
*/
t2=t1.reshape(4,3,2)
/*
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
*/
t2.shape=[2,3,4]
/*
t2=
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
*/
可以看出,reshape不會改變資料在記憶體中的先後順序,改變shape屬性同reshape()函式效果相同。
3.2 transpose
transpose方法,用於改變多維陣列各個維度(通道)上的對映關係。numpy多維陣列的維度(通道)變化規律為:最左端維度最大,變化速率最低,向右維度依次降低,變化速率依次變高。如三維陣列,通道編號分別為 0–>1–>2
t3=t2.transpose(0,2,1)
/*
array([[[ 0, 4, 8],
[ 1, 5, 9],
[ 2, 6, 10],
[ 3, 7, 11]],
[[12, 16, 20],
[13, 17, 21],
[14, 18, 22],
[15, 19, 23]]])
某點關係: t3[1,3,2]==t2[1,2,3] t3某點的值映射回t2的索引
*/
為了更加直觀,利用matlab生成如上有三個通道的偽影象塊img,影象大小格式為【height,width,channel】=【5,4,3】。
利用python讀入影象,其在記憶體中儲存的資料格式如下所示:
看上去有點詭異,沒有matlab單通道獨立顯示的方式直觀,但是,這種儲存格式方便畫素直接索引,如img[0,0]可直接返回三個通道的畫素值 【1,2,4】
可不可以利用transpose將python格式的影象,轉化為類似與matlab單通道的表示形式,當然可以:
imgt=img.transpose(2,0,1) ## 好強大
/*
array([[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]],
[[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]],
[[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]]], dtype=uint8)
*/
利用opencv讀取img,如下,在次證明了畫素值按照BGR格式儲存的事實。
ccimg=cv2.imread('img.jpg')
/*
array([[[4, 2, 1],
[4, 2, 1],
[4, 2, 1],
[4, 2, 1]],
[[4, 2, 1],
[4, 2, 1],
[4, 2, 1],
[4, 2, 1]],
[[4, 2, 1],
[4, 2, 1],
[4, 2, 1],
[4, 2, 1]],
[[4, 2, 1],
[4, 2, 1],
[4, 2, 1],
[4, 2, 1]],
[[4, 2, 1],
[4, 2, 1],
[4, 2, 1],
[4, 2, 1]]], dtype=uint8)
*/
相關推薦
python-opencv-matlab影象處理介面關係
1、說明 caffe框架由C++編寫,其還提供python和matlab介面呼叫。而caffe的影象讀取與儲存是利用opencv實現,因此需要梳理影象在不同介面中的轉換關係,方便不同介面下的資料傳輸與儲存。 關鍵點:影象檔案在記憶體中的儲存形式是連續儲
python進階—OpenCV之影象處理(二)
文章目錄 影象形態變換 影象的腐蝕 影象的膨脹 影象的開操作 影象的閉操作 影象的形態學梯度 影象的頂帽操作 影象的黑帽操作 影象的梯度(Image Gradients) So
python進階—OpenCV之影象處理(一)
文章目錄 顏色空間轉換 RGB色彩空間 HSV色彩空間 YUV色彩空間 簡單的物體跟蹤示例 HSV空間目標閾值選取 影象幾何變換 影象的縮放 影象的位移 影象的旋轉 影
【OpenCV數字影象處理】(4) 【Python程式設計】(4) 平移
配套使用的OpenCV版本:2.4.9 ; Python版本:2.7 主要參考文章(感謝作者分享) 程式極其類似於參考文章1、文章1使用的是OpenCV2.0,而OpenCV2.49的寫法稍有不同 效果參考文章1,語法參考文章2 主要思想(轉載自文章1)
python 中的 常用 opencv 以及影象處理相關函式總結整理
1.讀取圖片 img = cv2.imread("D:\cat.jpg") ,OpenCV目前支援讀取bmp、jpg、png、tiff等常用格式。 建立一個視窗 cv2.namedWindow("Image") 然後在視窗中顯示影象 cv2.ims
QT+opencv實現簡單的影象處理介面
本來實現的功能是比較簡單的,但在實現過程中遇到不少問題,所以就寫下來作為一個小結,也可以供大家參考: 實現的目標視窗如下: 1、其中選單欄的檔案裡實現開啟測試檔案,開啟自定義檔案,還原影象,清除影象,退出系統等功能,這些功能的實現可以參考《opencv程式設計案例》這本書
opencv-python函式(三)影象處理
1.顏色空間轉換 常用到的就兩種:BGR↔Gray 和 BGR↔HSV 要用到的函式是:cv2.cvtColor(input_image ,flag),其中 flag就是轉換型別。 對於 BGR↔Gray 的轉換,我們要使用的 flag 就是 cv2.COLOR_BGR
【AI基礎】python:openCV——圖像處理(1)
python python:openCV OpenCV圖像的基本操作 :使用包cv2,numpy import cv2 import numpy as np img = cv2.imread(‘1.jpg‘) cv2.imshow(‘image‘,img) k = cv2.waitKey(0) "
【AI基礎】python:openCV——圖像處理(2)
getTrackbarPos圖像處理練習 制作一個滑動條調色板,使用函數cv2.getTrackbarPos();cv2.creatTrackbar() import cv2 import numpy as np def nothing(x): pass img = np.zeros((300,5
Python+OpenCV圖像處理(一)——讀取顯示一張圖片
沒有 class 釋放資源 圖像 Coding 路徑 troy 如果 nco 配置好所有環境後,開始利用python+opencv進行圖像處理第一步。 讀取和顯示一張圖片: import cv2 as cv src=cv.imread(‘E:\imageload\
Python+OpenCV圖像處理(五)—— ROI與泛洪填充
targe ros com ray inter color 方式 高度 lan 一、ROI ROI(region of interest),感興趣區域。機器視覺、圖像處理中,從被處理的圖像以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域,稱為感興趣區域,ROI。
Python+OpenCV圖像處理(十四)—— 直線檢測
gap mat rgb2gray inf 單位 imshow width 結果 pre 簡介: 1.霍夫變換(Hough Transform) 霍夫變換是圖像處理中從圖像中識別幾何形狀的基本方法之一,應用很廣泛,也有很多改進算法。主要用來從圖像中分離出具有某種相同特征的幾何
python+opencv圖像處理(一)
strong dct變換 mage uid 操作系統 之間 mea numpy 包括 一、什麽是opencv? Open Source Computer Vision Library.OpenCV於1999年由Intel建立,如今由Willow Garage提供支持
Python+OpenCV圖像處理(十六)—— 輪廓發現
draw 一個 設置 在外 ace align list tco 灰度 簡介:輪廓發現是基於圖像邊緣提取的基礎尋找對象輪廓的方法,所以邊緣提取的閾值選定會影響最終輪廓發現結果。 代碼如下: import cv2 as cv import numpy as np def c
[python-opencv]超大影象二值化方法
*分塊 *全域性閾值 VS 區域性閾值 1 import cv2 as cv 2 import numpy as np 3 4 def big_image_binary(image): 5 print(image.shape) 6 cw = 213 7
Python OpenCV _3形態學處理(腐蝕膨脹,開閉運算,以及利用形態學進行邊緣角點檢測)
Python OpenCV這個初級影象處理系列是參考他人的文章寫的,有些地方做了一些改動,沒有太多理論,側重程式碼實現,主要目的是將這些基本操作程式碼系統地梳理一遍,也是為了以後能快速查詢。 此係列原始碼在我的GitHub裡:https://github.com/yeyujujishou19/P
OpenCV+OCR 影象處理字元識別原理及程式碼
需配置好OpenCV和OCR環境下執行 1、OpenCV簡介 OpenCV的全稱是Open Source Computer Vision Library,是一個跨平臺的計算機視覺庫。 OpenCV用C++語言編寫,它的主要介面也是C++語言,但是依然保留了大量的C語言介
使用OpenCV進行影象處理-改變影象的亮度與對比度
通過OpenCV,製作一個有關影象處理的在Linux下的軟體。 製作可以自動處理影象亮度的簡單軟體。 開發環境:CodeBlocks #include <iostream> #incl
使用Python-OpenCV消除影象中孤立的小區域
之前一直使用Skimage中的形態學處理來進行孤立小區域的去除,程式碼如下 img = morphology.remove_small_objects(img, size) img = morphology.remove_small_holes(img, size) 後面
Matlab 影象處理 筆記
批量儲存視訊每一幀影象: video = VideoReader('realSample.avi'); % 讀取視訊檔案 nFrames = video.NumberOfFrames; %得到幀