# -*- coding:utf-8 —*-import numpy as npimport cv2# 目標:# 獲取像素值并修改# 獲取圖像的信息# 圖像的RIO()# 圖象通道的拆分及合并# step1: 獲取圖像的信息# 讀取圖片 讀入彩色圖和灰度圖# color_img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)# gray_img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_GRAYSCALE)# 獲取信息# 圖像的信息包括:行、列、通道、圖像數據類型、像素數目# PRint color_img.shape# #(1050L, 700L, 3L) 代表的意思是:(行、列、通道數)/# print color_img.size# #2205000 代表的意思是:*個像素數# print color_img.dtype# #uint8 代表圖像的類型,在OpenCV-python中經常出項數據類型不一致的錯誤,因此該屬性特別重要#獲取并修改像素值# 可以根據像素的行列坐標獲取像數值,對于RGB模式的返回的是r,g,b的值,對于灰度圖則返回灰度值# 獲取某個點的像素值# color_px = color_img[100,100]# gray_px = gray_img[100,100]# print color_px, gray_px# #[199 222 224] 220# 修改末各點的像素值# color_img[100,100] = [255, 255, 255]# gray_img[100, 100] = 255# 警告: Numpy是經過優化的進行矩陣快速計算運算包,所以不推薦逐個修改像素值,很慢,所以能用矩陣運算的絕不用循環# 獲得像素值更好的方法# 不是很明白??? 好像和Numpy有點關系# print color_img.item(10, 10, 2)# #190# color_img.itemset((10, 10, 2), 100)# print color_img.item(10, 10, 2)# # 100# 圖像的ROI# ROI是使用Numpy索引來獲得的# 作用:對一幅圖片的特定區域進行操作# 情景:例如在一個想象中找到人的眼睛,則應該先找到臉,再找眼睛# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)# pice_img = img[120:320, 300:450]# cv2.namedWindow("show")# # cv2.imshow("show", pice_img)# img[420:620, 400:550] = pice_img# cv2.imshow("show", img)# if cv2.waitKey(0) == 27:# cv2.destroyAllWindows()# # elif cv2.waitKey(0) == ord("s"):# 拆分及合并圖像通道# 有時我們需要分別對R、G、B三個通道分別驚醒操作,又是我們則要將一個地理通道分成BGR# img = cv2.imread("TestOpencv.jpg", cv2.IMREAD_COLOR)# b, g, r = cv2.split(img)# print b, "/n/n"# print g, "/n/n"# print r, "/n/n"# # 將紅色通道全部變為0# b = img[:,:,0]# # 警告:cv2.split() 是一個比較耗時的操作。只有真正需要時才用它,能用 Numpy 索引就盡量用。# 為圖像擴邊(填充)# 如果你想在圖像周圍創建一個邊,就像相框一樣,你可以使用cv2.copyMakeBorder() 函數。# 這經常在卷積運算或 0 填充時被用到。# 這個函數包括如下參數:# ? src 輸入圖像# ? top, bottom, left, right 對應邊界的像素數目。# ? borderType 要添加那種類型的邊界,類型如下# – cv2.BORDER_CONSTANT 添加有顏色的常數值邊界,還需要 下一個參數(value)。# – cv2.BORDER_REFLECT邊界元素的鏡像。比如: fedcba|abcde- fgh|hgfedcb# – cv2.BORDER_REFLECT_101orcv2.BORDER_DEFAULT 跟上面一樣,但稍作改動。# 例如: gfedcb|abcdefgh|gfedcba# – cv2.BORDER_REPLICATE重復最后一個元素。# 例如: aaaaaa| abcdefgh|hhhhhhh# – cv2.BORDER_WRAP 不知道怎么說了,# 就像這樣: cdefgh| abcdefgh|abcdefg# ? value 邊界顏色,如果邊界的類型是 cv2.BORDER_CONSTANT
新聞熱點
疑難解答