這篇文章帶給大家的內容是關於python圖像處理的基礎和OpenCV的入門函數,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
圖像都是由像素(pixel)構成的,即圖像中的小方格,這些小方格都有一個明確的位置和被指派的色彩數值,而這些一小方格的顏色和位置就決定該影像所呈現出來的樣子。像素是影像中的最小單位,每個點陣影像包含了一定量的像素,這些像素決定影像在螢幕上所呈現的大小。
影像通常包含二值影像、灰階影像和彩色影像。
#1.二值圖片
二值圖片中任何一個點非黑即白,要麼為白色(像素為255),要麼為黑色(像素為0)。將灰階影像轉換為二值影像的過程,常透過依序遍歷判斷實現,如果像素>=127則設定為255,否則設定為0。
2.灰階影像
灰階影像除了黑和白,還有灰色,它把灰度分為256個不同的顏色,影像看著也更清晰。將彩色影像轉換為灰階圖是影像處理最基本的預處理操作,通常包括以下幾種方法:
(1) 浮點演算法:Gray=R*0.3 G*0.59 B*0.11
( 2) 整數方法:Gray=(R*30 G*59 B*11)/100
(3) 移位方法:Gray=(R*28 G*151 B*77)>>8;
(4) 平均值法:Gray=(R G B)/3;(此程式採用演算法)
(5) 只取綠色:Gray=G;
(6) 加權平均值演算法:根據光的亮度特性,公式: R=G=B=R*0.299 G*0.587 B0.144
透過上述任一方法求得Gray後,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它取代原來的RGB(R,G,B)就是灰階圖了。改變像素矩陣的RGB值,來達到彩色圖轉換為灰階圖。
3.彩色影像
彩色影像是RGB影像,RGB表示紅、綠、藍三原色,電腦裡所有顏色都是三原色不同比例組成的,即三色通道。
1.讀入圖像
OpenCV讀取圖像主要呼叫下面函數實作:
參數(1) cv2.IMREAD_UNCHANGED (影像不可變)
參數(2) cv2.IMREAD_GRAYSCALE (灰階影像)
參數(3) cv2.IMREAD_COLOR (讀入彩色影像)
參數(4) cv2.COLOR_BGR2RGB (影像通道BGR轉成RGB)
顯示影像呼叫函數如下:
#cv2.imshow(視窗名稱, 影像名稱)
3.視窗等待
呼叫函數如下:
鍵盤綁定函數,共一個參數,表示等待毫秒數,將等待特定的幾毫秒,看鍵盤是否有輸入,回傳值為ASCII值。如果其參數為0,則表示無限期的等待鍵盤輸入;參數>0表示等待delay毫秒;參數
4.刪除所有視窗
呼叫函數如下:
cv2.destroyAllWindows() 刪除所有視窗
cv2.destroyWindows() 刪除指定的視窗retval = cv2.imwrite(檔案位址, 檔案名)
# -*- coding:utf-8 -*-import cv2 #读取图片 img = cv2.imread("test.jpg") #显示图像 cv2.imshow("Demo", img) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() #写入图像 cv2.imwrite("testyxz.jpg", img)
同时
可以对代码进行升级,如下所示:
#无限期等待输入 k=cv2.waitKey(0) #如果输入ESC退出 if k==27: cv2.destroyAllWindows()
1.读取像素
灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。
灰度图像:返回值 = 图像(位置参数)
eg: test=img[88,42]
彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素
eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]
2.修改图像
修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。
灰度图像:
img[88,142] = 255
彩色图像:
img[88,142, 0] = 255
img[88,142, 1] = 255
img[88,142, 2] = 255
彩色图像:方法二
img[88,142] = [255, 255, 255]
下面代码是获取像素及修改的操作。
# -*- coding:utf-8 -*-import cv2 #读取图片 img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) test = img[88,142]print test img[88,142] = [255, 255, 255]print test #分别获取BGR通道像素 blue = img[88,142,0]print blue green = img[88,142,1]print green red = img[88,142,2]print red #显示图像 cv2.imshow("Demo", img) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() #写入图像 cv2.imwrite("testyxz.jpg", img)
输出结果如下所示:
[158 107 64]
[255 255 255]
255
255
255
下面代码是将行为100到200、列150到250的像素区域设置为白色。
# -*- coding:utf-8 -*-import cv2 #读取图片 img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED) #该区域设置为白色 img[100:200, 150:250] = [255,255,255] #显示图像 cv2.imshow("Demo", img) #等待显示 cv2.waitKey(0) cv2.destroyAllWindows() #写入图像 cv2.imwrite("testyxz.jpg", img)
运行结果如下图所示:
相关推荐:
Python零基础入门之八lambda的表达式和filter、map内置函数
以上是python影像處理的基礎和OpenCV的入門函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!