OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变
1 圖像的IO操作
這里我們會給大家介紹如何讀取圖像,如何顯示圖像和如何保存圖像。
1.1 讀取圖像
參數:
-
要讀取的圖像
-
讀取方式的標志
-
cv.IMREAD*COLOR:以彩色模式加載圖像,任何圖像的透明度都將被忽略。這是默認參數。
-
cv.IMREAD*GRAYSCALE:以灰度模式加載圖像
-
cv.IMREAD_UNCHANGED:包括alpha通道的加載圖像模式。
可以使用1、0或者-1來替代上面三個標志
-
-
參考代碼
import numpy as np import cv2 as cv # 以灰度圖的形式讀取圖像 img = cv.imread('messi5.jpg',0)
注意:如果加載的路徑有錯誤,不會報錯,會返回一個None值
1.2顯示圖像
1 . API
cv.imshow()參數:
- 顯示圖像的窗口名稱,以字符串類型表示
- 要加載的圖像
注意:在調用顯示圖像的API后,要調用cv.waitKey()給圖像繪制留下時間,否則窗口會出現無響應情況,并且圖像無法顯示出來。
另外我們也可使用matplotlib對圖像進行展示。
參考代碼
# opencv中顯示 cv.imshow('image',img) cv.waitKey(0) # matplotlib中展示 plt.imshow(img[:,:,::-1])1.3 保存圖像
API
cv.imwrite()參數:
- 文件名,要保存在哪里
- 要保存的圖像
參考代碼
cv.imwrite('messigray.png',img)1.4 總結
我們通過加載灰度圖像,顯示圖像,如果按's'并退出則保存圖像,或者按ESC鍵直接退出而不保存。
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 讀取圖像 img = cv.imread('messi5.jpg',0) # 2 顯示圖像 # 2.1 利用opencv展示圖像 cv.imshow('image',img) # 2.2 在matplotplotlib中展示圖像 plt.imshow(img[:,:,::-1]) plt.title('匹配結果'), plt.xticks([]), plt.yticks([]) plt.show() k = cv.waitKey(0) # 3 保存圖像 cv.imwrite('messigray.png',img)2 繪制幾何圖形
2.1 繪制直線
cv.line(img,start,end,color,thickness)參數:
- img:要繪制直線的圖像
- Start,end: 直線的起點和終點
- color: 線條的顏色
- Thickness: 線條寬度
2.2 繪制圓形
cv.circle(img,centerpoint, r, color, thickness)參數:
- img:要繪制圓形的圖像
- Centerpoint, r: 圓心和半徑
- color: 線條的顏色
- Thickness: 線條寬度,為-1時生成閉合圖案并填充顏色
2.3 繪制矩形
cv.rectangle(img,leftupper,rightdown,color,thickness)參數:
- img:要繪制矩形的圖像
- Leftupper, rightdown: 矩形的左上角和右下角坐標
- color: 線條的顏色
- Thickness: 線條寬度
2.4 向圖像中添加文字
cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)參數:
- img: 圖像
- text:要寫入的文本數據
- station:文本的放置位置
- font:字體
- Fontsize :字體大小
2.5 效果展示
我們生成一個全黑的圖像,然后在里面繪制圖像并添加文字
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1 創建一個空白的圖像 img = np.zeros((512,512,3), np.uint8) # 2 繪制圖形 cv.line(img,(0,0),(511,511),(255,0,0),5) cv.rectangle(img,(384,0),(510,128),(0,255,0),3) cv.circle(img,(447,63), 63, (0,0,255), -1) font = cv.FONT_HERSHEY_SIMPLEX cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA) # 3 圖像展示 plt.imshow(img[:,:,::-1]) plt.title('匹配結果'), plt.xticks([]), plt.yticks([]) plt.show()結果:
3 獲取并修改圖像中的像素點
我們可以通過行和列的坐標值獲取該像素點的像素值。對于BGR圖像,它返回一個藍,綠,紅值的數組。對于灰度圖像,僅返回相應的強度值。使用相同的方法對像素值進行修改。
import numpy as np import cv2 as cv img = cv.imread('messi5.jpg') # 獲取某個像素點的值 px = img[100,100] # 僅獲取藍色通道的強度值 blue = img[100,100,0] # 修改某個位置的像素值 img[100,100] = [255,255,255]4 獲取圖像的屬性
圖像屬性包括行數,列數和通道數,圖像數據類型,像素數等。
5 圖像通道的拆分與合并
有時需要在B,G,R通道圖像上單獨工作。在這種情況下,需要將BGR圖像分割為單個通道。或者在其他情況下,可能需要將這些單獨的通道合并到BGR圖像。你可以通過以下方式完成。
# 通道拆分 b,g,r = cv.split(img) # 通道合并 img = cv.merge((b,g,r))6 色彩空間的改變
OpenCV中有150多種顏色空間轉換方法。最廣泛使用的轉換方法有兩種,BGR?Gray和BGR?HSV。
API:
cv.cvtColor(input_image,flag)參數:
- input_image: 進行顏色空間轉換的圖像
- flag: 轉換類型
- cv.COLOR_BGR2GRAY : BGR?Gray
- cv.COLOR_BGR2HSV: BGR→HSV
總結:
圖像IO操作的API:
cv.imread(): 讀取圖像
cv.imshow():顯示圖像
cv.imwrite(): 保存圖像
在圖像上繪制幾何圖像
cv.line(): 繪制直線
cv.circle(): 繪制圓形
cv.rectangle(): 繪制矩形
cv.putText(): 在圖像上添加文字
直接使用行列索引獲取圖像中的像素并進行修改
拆分通道:cv.split()
通道合并:cv.merge()
色彩空間的改變
cv.cvtColor(input_image,flag)
總結
以上是生活随笔為你收集整理的OpenCV_02 图像的基本操作:图像IO+绘制图形+像素点+属性+图像通道+色彩空间的改变的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html导出pdf实例,jsPDF导出p
- 下一篇: ValueError: Found ar