图像处理OpenCV(2)——OpenCV基本操作之图像的基础操作
文章目錄
- 2.OpenCV基本操作
- 2.1 圖像的IO操作
- 2.1.1 讀取圖像
- 2.1.2 顯示圖像
- 2.1.3 保存圖像
- 2.1.4總結(jié)
- 2.2 繪制幾何圖形
- 2.2.1 繪制直線
- 2.2.2繪制圓形
- 2.2.3繪制矩形
- 2.2.4向圖像中添加文字
- 2.2.5效果顯示
- 2.3獲取并修改圖像中的像素點
- 2.4獲取圖像的屬性
- 2.5圖像通道的拆分與合并
- 2.6色彩空間的改變
2.OpenCV基本操作
2.1 圖像的IO操作
2.1.1 讀取圖像
API
cv.imread()參數(shù):
-
要讀取的圖像
-
讀取方式的標志:
-
cv.UMREAD*COLOR:以彩色模式加載圖像,任何圖像的透明度都將被忽略,這是默認參數(shù)
-
cv.IMREAD*GRAYSCALE:以灰度模式加載圖像
-
cv.IMREAD_UNCHANGED:包括alpha通道的加載圖像模式
可以使用1、0或者-1來代替上面三個標志
-
-
參考代碼:
import numpy as np import cv2 as cv # 以灰度圖的形式讀取圖像 img = cv.imread('1.png',0)
? 注意:如果加載的路徑有錯誤,不會報錯,會返回一個None值,因此要確保圖像是存在的,圖片路徑是對的。
2.1.2 顯示圖像
API
cv.imshow()參數(shù):
- 顯示圖像的窗口名稱,以字符串類型表示
- 要加載的圖像
注意:在調(diào)用顯示圖像的API后,要調(diào)用cv.waitKey()個圖像繪制留下時間,否則窗口會出現(xiàn)無響應(yīng)的情況,并且圖像無法顯示出來。
另外,我們也可以使用matplotlib對圖像進行展示。
參考代碼:
# opencv中顯示 cv.imshow('image',img) cv.waitKey(0) # matplotlib中展示 plt.imshow(img[:,:,::-1])2.1.3 保存圖像
API
cv.imwrite()參數(shù):
- 文件名,要保存在哪里
- 要保存的圖像
參考代碼
cv.imwrite('test.png',img)2.1.4總結(jié)
我們通過加載灰度圖像,顯示圖像,如果按’s’并退出則保存圖像,或者按ESC鍵直接退出而不保存。
參考代碼:
-
顯示彩色圖像:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 1.讀取圖像 img = cv.imread('1.png') # 2.顯示圖像 # 2.1利用opencv展示圖像 cv.imshow('image',img) cv.waitKey(0) cv.destroyAllWindows() -
顯示灰色圖像
-
保存圖像
# 3.保存圖像,注意保存路徑中不能有中文路徑 cv.imwrite('./1_IOtest.png',img)
2.2 繪制幾何圖形
2.2.1 繪制直線
cv.line(img,start,end,color,thickness)- 參數(shù):
- img:要繪制直線的圖像
- Start,end:直線的起點和終點
- color:線條的顏色
- thickness:線條寬度
2.2.2繪制圓形
cv.circle(img,centerpoint,r,color,thickness)- 參數(shù):
- img:要繪制圖形的圖像
- centerpoint,r:圓心和半徑
- color:線條的顏色
- thickness:線條寬度,為-1時生成閉合圖案并填充顏色
2.2.3繪制矩形
cv.rectangle(img,leftupper,rightdown,color,thickness)- 參數(shù):
- img:要繪制矩形的圖像
- leftupper,rightdown:舉行的左上角和右下角坐標
- color:線條的顏色
- thickness:線條寬度
2.2.4向圖像中添加文字
cv.putText(img,text,station,font,fontsize,color,thickness,cv.LINE_AA)- 參數(shù):
- img:圖像
- text:要寫入的文本數(shù)據(jù)
- station:文本的放置位置
- font:字體
- fontsize:字體大小
2.2.5效果顯示
生成一個全黑的圖像,然后再里面繪制圖像并添加文字
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # 創(chuàng)建一個空白的圖像 # 生成全黑的圖像即為np.zeros img = np.zeros((512,512,3),np.uint8) # 繪制圖形 cv.line(img,(0,0),(511,511),(255,0,0),5) cv.rectangle(img,(128,128),(384,384),(0,255,0),3) cv.circle(img,(256,256),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.imshow(img) plt.title('hello'),plt.xticks([]),plt.yticks([]) plt.show()效果:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-B4wlv6iR-1647516243400)(C:\Users\23642\AppData\Roaming\Typora\typora-user-images\image-20220317171053140.png)]
2.3獲取并修改圖像中的像素點
我們可以通過行和列的坐標獲取該像素點的像素值。對于BGR圖像,它返回一個藍、綠、紅值得數(shù)組。對于灰度圖像,僅返回相應(yīng)的強度值,使用相同的方法對像素值進行修改。
import matplotlib.pyplot as plt import numpy as np import cv2 as cv img = cv.imread('/images/1.png') # 創(chuàng)建全黑的圖像 img = np.zeros((256,256,3),np.uint8) plt.imshow(img[:,:,::-1]) print(img[100, 100]) print(img[100, 100, 0]) img[100,100]=(0,0,255) print(img[100, 100]) plt.imshow(img[:,:,::-1]) plt.show()2.4獲取圖像的屬性
圖像屬性包括行數(shù)、列數(shù)和通道數(shù),圖像數(shù)據(jù)類型、像素數(shù)等。
| 形狀 | img.shape |
| 圖像大小 | img.size |
| 數(shù)據(jù)類型 | img.dtype |
代碼演示:
import numpy as np import cv2 as cv import matplotlib.pyplot as plt # img = cv.imread('/images/1.png') img = np.zeros((256,256,3),np.uint8) print(img.shape) # (256, 256, 3) print(img.dtype) # uint8 print(img.size) # 1966082.5圖像通道的拆分與合并
有時需要在B、G、R通道圖像上單獨工作。在這種情況下,需要將RGB圖像分割為單個通道,或者在其他情況下,可能需要將這些單獨的通道合并到RGB圖像,可以通過以下方式完成:
# 通道拆分 b,g,r=cv.split(img) # 通道合并 img = cv.merge((b,g,r))2.6色彩空間的改變
OpenCV中有150多種顏色空間轉(zhuǎn)換方法。最廣泛使用的轉(zhuǎn)換方法有兩種,BGR<->Gray和BGR<->HSV
API:
cv.cvColor(input_image,flag)參數(shù):
- input_image:進行顏色空間轉(zhuǎn)換的圖像
- flag:轉(zhuǎn)換類型
- cv.COLOR_BGR2GRAY :BGR<->Gray
- cv.COLOR_BGR2HSV :BGR<->HSV
效果:
總結(jié)
以上是生活随笔為你收集整理的图像处理OpenCV(2)——OpenCV基本操作之图像的基础操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 麒麟810处理器_麒麟810性能实测:对
- 下一篇: xv6-zynq