首頁  >  文章  >  後端開發  >  python影像處理的基礎和OpenCV的入門函數

python影像處理的基礎和OpenCV的入門函數

不言
不言原創
2018-09-08 17:28:143433瀏覽

這篇文章帶給大家的內容是關於python圖像處理的基礎和OpenCV的入門函數,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

一.圖像基礎知識

圖像都是由像素(pixel)構成的,即圖像中的小方格,這些小方格都有一個明確的位置和被指派的色彩數值,而這些一小方格的顏色和位置就決定該影像所呈現出來的樣子。像素是影像中的最小單位,每個點陣影像包含了一定量的像素,這些像素決定影像在螢幕上所呈現的大小。

python影像處理的基礎和OpenCV的入門函數

影像通常包含二值影像、灰階影像和彩色影像。


python影像處理的基礎和OpenCV的入門函數


#1.二值圖片
二值圖片中任何一個點非黑即白,要麼為白色(像素為255),要麼為黑色(像素為0)。將灰階影像轉換為二值影像的過程,常透過依序遍歷判斷實現,如果像素>=127則設定為255,否則設定為0。


python影像處理的基礎和OpenCV的入門函數

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值,來達到彩色圖轉換為灰階圖。

python影像處理的基礎和OpenCV的入門函數

3.彩色影像
彩色影像是RGB影像,RGB表示紅、綠、藍三原色,電腦裡所有顏色都是三原色不同比例組成的,即三色通道。


python影像處理的基礎和OpenCV的入門函數



python影像處理的基礎和OpenCV的入門函數


#.本文主要使用Python2.7和OpenCV進行講解,首先呼叫”pip install opencv-python”安裝OpenCV庫,如下圖所示:





1.讀入圖像 OpenCV讀取圖像主要呼叫下面函數實作:

img = cv2.imread(檔名,[,參數])

 參數(1) cv2.IMREAD_UNCHANGED  (影像不可變)

 參數(2) cv2.IMREAD_GRAYSCALE (灰階影像)

 參數(3) cv2.IMREAD_COLOR (讀入彩色影像) 參數(4) cv2.COLOR_BGR2RGB (影像通道BGR轉成RGB)

2.顯示影像


顯示影像呼叫函數如下:

#cv2.imshow(視窗名稱, 影像名稱)
3.視窗等待

呼叫函數如下:

cv2.waitKey(delay)

 鍵盤綁定函數,共一個參數,表示等待毫秒數,將等待特定的幾毫秒,看鍵盤是否有輸入,回傳值為ASCII值。如果其參數為0,則表示無限期的等待鍵盤輸入;參數>0表示等待delay毫秒;參數
4.刪除所有視窗

呼叫函數如下:

cv2.destroyAllWindows() 刪除所有視窗

cv2.destroyWindows() 刪除指定的視窗


5.寫入圖片
python影像處理的基礎和OpenCV的入門函數呼叫函數如下:

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)

輸出結果如下圖所示,並且在資料夾下儲存了一張名為「testyxz.jpg」的圖片。

########################如果程式碼中沒有watiKey(0)函數,則執行結果如下圖所示: ##### #
python影像處理的基礎和OpenCV的入門函數

同时
可以对代码进行升级,如下所示:

#无限期等待输入
k=cv2.waitKey(0)
#如果输入ESC退出
if k==27:
    cv2.destroyAllWindows()

三.OpenCV像素处理

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影像處理的基礎和OpenCV的入門函數

相关推荐:

Python编程中使用Pillow来处理图像的基础教程

Python零基础入门之八lambda的表达式和filter、map内置函数

Python基于opencv的图像压缩算法实例分析

以上是python影像處理的基礎和OpenCV的入門函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn