欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+OpenCV實(shí)現(xiàn)圖像基本操作的示例詳解

 更新時間:2023年04月19日 10:17:18   作者:暢游星辰大海  
這篇文章主要為大家詳細(xì)介紹了Python通過OpenCV實(shí)現(xiàn)圖像的一些基本處理操作的方法,文中的示例代碼簡潔易懂,具有一定的參考價值,感興趣的可以學(xué)習(xí)一下

1. 計(jì)算機(jī)眼中的圖像

計(jì)算機(jī)眼中的圖像由一個個像素組成, 每個像素點(diǎn)的值在0-255之間,代表像素點(diǎn)的亮度(0為最暗,255為最亮)。

灰度圖(黑白圖)為單通道。

彩色圖為三通道。彩色圖像包括三個顏色通道——B,G,R,分別表示藍(lán)、綠、紅。

2. 圖像的表示

圖像的高和寬分別代表圖像在豎直和水平方向分別有多少個像素點(diǎn)。也等價于每個顏色通道矩陣的維度:

彩色圖像為三維數(shù)組,分別為行數(shù)(高度),列數(shù)(寬度),顏色通道;

灰度圖為二維數(shù)組,分別為行數(shù)(高度),列數(shù)(寬度)。

3. 基礎(chǔ)操作 圖像的讀取

文件路徑:不能包含中文字符

讀取模式:

cv2.IMREAD_COLOR 彩色BGR模式,忽略透明度,可以用 1代替,默認(rèn)編譯模式。
cv2.IMREAD_GRAYSCALE 灰度模式,可以用 0 代替,將圖像轉(zhuǎn)換為灰度圖像。
cv2.IMREAD_UNCHANGED 輸出包含alpha通道的圖像,可以用 -1 代替

補(bǔ)充說明:

Alpha通道是指圖像中的透明度信息,它可以控制像素的透明度和不透明度。對于包含alpha通道的圖像,在讀取時需要使用IMREAD_UNCHANGED標(biāo)志來保留這些透明度信息,以便后續(xù)處理和操作。如果不使用該標(biāo)志,則讀取的圖像將被默認(rèn)處理成不包含alpha通道的普通圖像。

代碼示例:

#包的配置
import cv2
import matplotlib.pyplot as plt
import numpy as np


img=cv2.imread(自行復(fù)制圖片路徑到這里) # 注意不要使用雙層引號
print(img)               #打印像素
print(img.shape)         #(高,寬,通道)

第一個print會打印出來圖像矩陣,由于顯示太多就不展示了,大家自己嘗試看看效果;

第二個print會打印出圖像的高、寬和通道數(shù),彩色圖像的通道數(shù)是3,灰度圖的通道數(shù)為1

圖像的顯示

cv2.imshow("窗口名", 要顯示的圖片)

窗口名,通常是字符串類型

cv2.imshow("img",img)
cv2.waitKey(0)      #等待鍵盤輸入,輸入任意鍵返回
cv2.destroyAllWindows()    #關(guān)閉窗口

硬核知識:

  • waitKey()內(nèi)數(shù)值若為0,則表示輸入任意鍵后退出,若為大于0的數(shù)字,則以毫秒為單位倒計(jì)時退出。
  • 新手上路,有時會碰到圖片太大顯示不全的問題,這時在三行代碼的前面加上cv2.namedWindow('img', cv2.WINDOW_KEEPRATIO)就能解決了
  • 這是由于上述代碼默認(rèn)的窗口屬性為cv2.WINDOW_AUTOSIZE(按照圖片大小自動調(diào)整窗口大?。瑒t當(dāng)圖片尺寸小于屏幕大小時,按圖片尺寸設(shè)置窗口大小,顯示一個完整的圖片。當(dāng)圖片尺寸大于屏幕大小時,窗口依舊按照圖片尺寸設(shè)置,則我們的屏幕不能顯示整個窗口,從而產(chǎn)生圖片顯示不全的問題

4. 截取部分圖像數(shù)據(jù)(ROI)

image=img[ : , : ]

冒號前后是像素區(qū)域

截取步驟就這一行代碼就能實(shí)現(xiàn),例如:image=img[0:200,100:200]

再加上面的圖片讀取,圖片顯示,就能完整的看到效果了

img=cv2.imread("自行復(fù)制圖像路徑")
image=img[0:200,100:200]
cv2.imshow("image",image)
cv2.waitKey(0)      #等待鍵盤輸入,輸入任意鍵返回
cv2.destroyAllWindows()    #關(guān)閉窗口

5. 視頻的讀取

對于視頻的處理,其實(shí)和對圖像的處理是相同的,原理就是利用循環(huán)將視頻拆分成一幀一幀的圖像,對每一幀圖像進(jìn)行處理

對視頻的處理主要包括如下步驟:

cv2.VideoCapture() 讀取攝像頭畫面或者視頻文件,本文章使用視頻文件來演示

  • 檢查是否打開成功,返回一個布爾值和一幀圖像的矩陣數(shù)組
  • 對每一幀圖像進(jìn)行處理
#視頻格式
vc=cv2.VideoCapture("自行復(fù)制視頻路徑")

#檢查是否打開成功
if vc.isOpened():
    open, frame = vc.read()
else:
    open = False

#逐幀處理
while open:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret == True:
        #灰度處理
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #轉(zhuǎn)換為灰度圖
        cv2.imshow('result',gray)     # 將灰度圖輸出
        if cv2.waitKey(100) & 0xFF == 27: #處理完后每一幀的等待時間
            break
vc.release()
cv2.destroyAllWindows()

6. 邊界填充

邊界填充常見的有6種方法

BORDER_REPLICATE:復(fù)制法,也就是復(fù)制最邊緣像素。

BORDER_REFLECT:反射法,對感興趣的圖像中的像素在兩邊進(jìn)行復(fù)制

例如:fedcba|abcdefgh|hgfedcb

BORDER_REFLECT_101:反射法,也就是以最邊緣像素為軸,對稱,gfedcb|abcdefgh|gfedcba

BORDER_WRAP:外包裝法abcdefgh|abcdefgh|abcdefg

BORDER_CONSTANT:常量法,常數(shù)值填充,需要在設(shè)置一個value值,以顯示填充的顏色。

下面是一張示例圖像,經(jīng)過程序處理后得到的六張圖像

代碼示例:

img = cv2.imread("自行復(fù)制圖像鏈接")

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 將BGR圖片轉(zhuǎn)換為RGB圖片
top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)  # 定義圖片尺寸

replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT, value=0)
plt.imshow(img)  # 原圖顯示
plt.show()

plt.subplot(2, 3, 1), plt.imshow(img, 'gray'), plt.title('original')
plt.subplot(2, 3, 2), plt.imshow(replicate, 'gray'), plt.title('replicate')
plt.subplot(2, 3, 3), plt.imshow(reflect, 'gray'), plt.title('reflect')
plt.subplot(2, 3, 4), plt.imshow(reflect101, 'gray'), plt.title('reflect')
plt.subplot(2, 3, 5), plt.imshow(wrap, 'gray'), plt.title('wrap')
plt.subplot(2, 3, 6), plt.imshow(constant, 'gray'), plt.title('constant')

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

7. 圖像的加法 圖像的加法

**前提:**兩張圖像擁有相同的大小和類型,在處理時應(yīng)該將兩幅圖像相同位置的像素的灰度值(灰度圖)或彩色像素各通道值(彩色圖像)分別相加。通常情況下,在灰度圖像中,像素用 8 個比特位(一個字節(jié))來表示,像素值的范圍是[0,255]。兩個像素值在進(jìn)行加法運(yùn)算時,求得的和很可能超過 255,此時就將這個數(shù)%256取余。

使用價值

往小處講:

圖像的加法可以實(shí)現(xiàn)兩張圖像的融合,同時保留原圖像的信息。在灰度圖像中,加法會使圖像變亮;而在彩色圖像中,加法會使圖像顏色更鮮艷。加法也可用于實(shí)現(xiàn)圖像的平均化和均衡化。

向大處說:

  • 圖像增強(qiáng):利用兩個圖像的加法,可以增強(qiáng)圖像的亮度、清晰度和對比度等方面,使得圖像更加鮮明、清晰。
  • 圖像融合:將兩個不同的圖像進(jìn)行加法運(yùn)算,可以實(shí)現(xiàn)圖像的融合。例如在醫(yī)學(xué)圖像的處理中,將 MRI 和 CT 兩個不同的圖像進(jìn)行加法融合,可以更清晰地顯示出人體器官的位置和結(jié)構(gòu)信息。
  • 圖像合成:利用圖像加法可以將圖像元素進(jìn)行合成,生成新的圖像。例如,將兩個不同的圖像進(jìn)行疊加,可以生成動態(tài)圖像或者創(chuàng)意圖像。
  • 噪聲消除:將兩個相同的圖像進(jìn)行加法運(yùn)算,可以消除其中的噪聲。由于噪聲是隨機(jī)變化的,將兩個相同的圖像進(jìn)行加法運(yùn)算可以消除噪聲的影響,提高圖像的質(zhì)量。

代碼示例:

import cv2
# 讀取兩張灰度圖像
img1 = cv2.imread('image1.jpg', cv2.IMREAD_GRAYSCALE)
img2 = cv2.imread('image2.jpg', cv2.IMREAD_GRAYSCALE)
# 將兩張圖像相同位置的像素灰度值相加
result = cv2.add(img1, img2)
# 顯示結(jié)果圖像
cv2.imshow('Result Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

圖像的融合

cv2.addWeighted(圖片, 0.5, 圖片, 0.4, 0)

解釋:第一個參數(shù)是輸入的第一張圖像,第二個參數(shù)是第一張圖像的權(quán)重值;第三個參數(shù)是輸入的第二張圖像,第四個參數(shù)是第二張圖像的權(quán)重值;第五個參數(shù)是一個可選的縮放常數(shù),可以用于調(diào)整輸出圖像的亮度。

img_1 = cv2.imread(自行復(fù)制圖像路徑)
img_2 = cv2.imread(自行復(fù)制圖像路徑)

# 打印出圖片像素尺寸
print(img_1.shape)
print(img_2.shape)

# 統(tǒng)一圖片尺寸
res_1 = cv2.resize(img_1, (1700, 1200))  # 圖像重置函數(shù)
res_2 = cv2.resize(img_2, (1700, 1200))

# 圖片融合
res = cv2.addWeighted(res_1, 0.4, res_2, 0.8, 0)
res = cv2.cvtColor(res, cv2.COLOR_BGR2RGB)  # 將BGR圖片轉(zhuǎn)換為RGB圖片

plt.imshow(res)
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

這是將兩張圖片融合后的效果示例

以上就是Python+OpenCV實(shí)現(xiàn)圖像基本操作的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV圖像基本操作的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 對python 多個分隔符split 的實(shí)例詳解

    對python 多個分隔符split 的實(shí)例詳解

    今天小編就為大家分享一篇對python 多個分隔符split 的實(shí)例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python安裝及變量名介紹詳解

    python安裝及變量名介紹詳解

    這篇文章主要介紹了python安裝及變量名介紹詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 解決django服務(wù)器重啟端口被占用的問題

    解決django服務(wù)器重啟端口被占用的問題

    今天小編就為大家分享一篇解決django服務(wù)器重啟端口被占用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python實(shí)現(xiàn)對圖像加噪(高斯噪聲 椒鹽噪聲)

    Python實(shí)現(xiàn)對圖像加噪(高斯噪聲 椒鹽噪聲)

    這篇文章主要介紹了展示通過Python給圖像疊加不同等級的椒鹽噪聲和高斯噪聲的代碼,相應(yīng)的疊加噪聲的已編為對應(yīng)的類,可實(shí)例化使用。感興趣的同學(xué)可以看看
    2021-11-11
  • 解決Python 寫文件報(bào)錯TypeError的問題

    解決Python 寫文件報(bào)錯TypeError的問題

    這篇文章主要介紹了解決Python 寫文件報(bào)錯TypeError的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • python中matplotlib的顏色以及形狀實(shí)例詳解

    python中matplotlib的顏色以及形狀實(shí)例詳解

    在Python中經(jīng)常使用matplotlib畫圖,為了讓圖像顯示的更加好看,經(jīng)常需要對圖表點(diǎn)、線形狀及顏色進(jìn)行設(shè)置,下面這篇文章主要給大家介紹了關(guān)于python中matplotlib的顏色以及形狀的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 解決django FileFIELD的編碼問題

    解決django FileFIELD的編碼問題

    這篇文章主要介紹了解決django FileFIELD的編碼問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python獲取微信企業(yè)號打卡數(shù)據(jù)并生成windows計(jì)劃任務(wù)

    python獲取微信企業(yè)號打卡數(shù)據(jù)并生成windows計(jì)劃任務(wù)

    由于公司的系統(tǒng)用的是Java版本,開通了企業(yè)號打卡之后又沒有預(yù)算讓供應(yīng)商做數(shù)據(jù)對接,所以只能自己搗鼓這個,以下是個人設(shè)置的一些內(nèi)容,僅供大家參考
    2019-04-04
  • Python深拷貝與淺拷貝引用

    Python深拷貝與淺拷貝引用

    這篇文章主要介紹了Python深拷貝與淺拷貝引用,Python并沒有拷貝這個對象,而只是拷貝了這個對象的引用,下文具體的相關(guān)介紹需要的小伙伴可以參考一下
    2022-04-04
  • Python中OTSU算法的原理與實(shí)現(xiàn)詳解

    Python中OTSU算法的原理與實(shí)現(xiàn)詳解

    OTSU算法是大津展之提出的閾值分割方法,又叫最大類間方差法,本文主要為大家詳細(xì)介紹了OTSU算法的原理與Python實(shí)現(xiàn),感興趣的小伙伴可以了解下
    2023-12-12

最新評論