最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python圖像處理之圖像融合與ROI區(qū)域繪制詳解

 更新時間:2022年01月27日 14:29:19   作者:Eastmount  
這篇文章將詳細講解圖像融合處理和ROI區(qū)域繪制,同時補充圖像屬性、通道和類型轉(zhuǎn)換。文中的示例代碼講解詳細,需要的可以參考一下

一.圖像融合

圖像融合通常是指多張圖像的信息進行融合,從而獲得信息更豐富的結(jié)果,能夠幫助人們觀察或計算機處理。圖5-1是將兩張不清晰的圖像融合得到更清晰的效果圖。

圖像融合是在圖像加法的基礎上增加了系數(shù)和亮度調(diào)節(jié)量,它與圖像的主要區(qū)別如下[1-3]:

圖像加法:目標圖像 = 圖像1 + 圖像2

圖像融合:目標圖像 = 圖像1 × 系數(shù)1 + 圖像2 × 系數(shù)2 + 亮度調(diào)節(jié)量

在OpenCV中,圖像融合主要調(diào)用addWeighted()函數(shù)實現(xiàn),其原型如下。需要注意的是,兩張融合圖像的像素大小必須一致,參數(shù)gamma不能省略。

dst = cv2.addWeighted(scr1, alpha, src2, beta, gamma)
dst = src1 * alpha + src2 * beta + gamma

下面的代碼是將兩張圖片進行圖像融合,兩張圖片的系數(shù)均為1。

#coding:utf-8
# By:Eastmount
import cv2 ?
import numpy as np ?
import matplotlib.pyplot as plt
?
#讀取圖片
src1 = cv2.imread('lena.png')
src2 = cv2.imread('luo.png')

#圖像融合
result = cv2.addWeighted(src1, 1, src2, 1, 0)

#顯示圖像
cv2.imshow("src1", src1)
cv2.imshow("src2", src2)
cv2.imshow("result", result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果如圖5-2所示,它將src1圖像和src2圖像按比例系數(shù)進行了融合,生成目標結(jié)果圖result。

同樣可以設置不同的融合比例,圖5-3是下面核心函數(shù)的效果圖。

cv2.addWeighted(src1, 0.6, src2, 0.8, 10)

二.圖像ROI區(qū)域定位

ROI(Region of Interest)表示感興趣區(qū)域,是指從被處理圖像以方框、圓形、橢圓、不規(guī)則多邊形等方式勾勒出需要處理的區(qū)域??梢酝ㄟ^各種算子(Operator)和函數(shù)求得感興趣ROI區(qū)域,被廣泛應用于熱點地圖、人臉識別、圖像分割等領域。如圖5-4獲取Lena圖的臉部輪廓[4]。

通過像素矩陣可以直接獲取ROI區(qū)域,如img[200:400, 200:400]。下面的代碼是獲取臉部ROI區(qū)域并顯示。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np

#讀取圖片
img = cv2.imread("lena.png")

#定義200×200矩陣 3對應BGR
face = np.ones((200, 200, 3))

#顯示原始圖像
cv2.imshow("Demo", img)

#顯示ROI區(qū)域
face = img[150:350, 150:350]
cv2.imshow("face", face)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果如圖5-5所示,它將Lena原圖的臉部提取出來。

同樣,如果想將提取的ROI區(qū)域融合至其他圖片,則使用賦值語句即可。下面代碼是將提取的Lena頭部輪廓融合至一幅新的圖像中。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np

#讀取圖片
img = cv2.imread("Lena.png")
test = cv2.imread("luo.png",)

#定義150×150矩陣 3對應BGR
face = np.ones((150, 150, 3))

#顯示原始圖像
cv2.imshow("Demo", img)

#顯示ROI區(qū)域
face = img[200:350, 200:350]
test[250:400, 250:400] = face
cv2.imshow("Result", test)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

運行結(jié)果如圖5-6所示,它將提取的150×150臉部輪廓融合至新的圖像[250:400, 250:400] 區(qū)域。

三.圖像屬性

前面一篇文章中我們已經(jīng)看到了size、shape等關鍵字。這篇文章就對圖像中最常見的三個屬性進行介紹,它們分別是圖像形狀(shape)、像素大?。╯ize)和圖像類型(dtype)。

(1)shape

通過shape關鍵字獲取圖像的形狀,返回包含行數(shù)、列數(shù)、通道數(shù)的元組。其中灰度圖像返回行數(shù)和列數(shù),彩色圖像返回行數(shù)、列數(shù)和通道數(shù)。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy

#讀取圖片
img = cv2.imread("luo.png")

#獲取圖像形狀
print(img.shape)

#顯示圖像
cv2.imshow("Demo", img)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

最終輸出結(jié)果如圖5-7所示,(412,412,3),它表示該圖像共412行、412列像素,包括3個通道。

(2)size

通過size關鍵字獲取圖像的像素數(shù)目,其中灰度圖像返回行數(shù)×列數(shù),彩色圖像返回行數(shù)×列數(shù)×通道數(shù)。下述代碼就是獲取“luo.png”圖像的大小。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy

#讀取圖片
img = cv2.imread("luo.png")

#獲取圖像形狀
print(img.shape)

#獲取像素數(shù)目
print(img.size)

輸出結(jié)果如下所示,包含510468個像素,即為413×412×3。

(412, 412, 3)

509232

(3)dtype

通過dtype關鍵字獲取圖像的數(shù)據(jù)類型,通常返回uint8。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy

#讀取圖片
img = cv2.imread("Lena.png")

#獲取圖像形狀
print(img.shape)

#獲取像素數(shù)目
print(img.size)

#獲取圖像數(shù)據(jù)類型
print(img.dtype)

四.圖像通道分離及合并

OpenCV通過split()函數(shù)和merge()函數(shù)實現(xiàn)對圖像通道的處理,包括通道分離和通道合并。

(1)split()函數(shù)

OpenCV讀取的彩色圖像由藍色(B)、綠色(G)、紅色(R)三原色組成,每一種顏色可以認為是一個通道分量[4],如圖5-8所示。

split()函數(shù)用于將一個多通道數(shù)組分量成三個單通道,其函數(shù)原型如下所示:

mv = split(m[, mv])

– m表示輸入的多通道數(shù)組

– mv表示輸出的數(shù)組或vector容器

下面的代碼是獲取彩色“小珞珞”圖像三個顏色通道并分別顯示。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy

#讀取圖片
img = cv2.imread("luo.png")

#拆分通道
b, g, r = cv2.split(img)

#顯示原始圖像
cv2.imshow("B", b)
cv2.imshow("G", g)
cv2.imshow("R", r)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

顯示結(jié)果如圖5-9所示,它展示了B、G、R三個通道的顏色分量。

同時,可以獲取不同通道顏色,核心代碼為:

  • b = cv2.split(a)[0]
  • g = cv2.split(a)[1]
  • r = cv2.split(a)[2]

(2)merge()函數(shù)

該函數(shù)是split()函數(shù)的逆向操作,將多個數(shù)組合成一個通道的數(shù)組,從而實現(xiàn)圖像通道的合并,其函數(shù)原型如下:

dst = merge(mv[, dst])

– mv表示輸入的需要合并的數(shù)組,所有矩陣必須有相同的大小和深度

– dst表示輸出具有與mv相同大小和深度的數(shù)組

實現(xiàn)圖像三個顏色通道融合的代碼如下:

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np

#讀取圖片
img = cv2.imread("luo.png")

#拆分通道
b, g, r = cv2.split(img)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
? ? ? ? ? ?
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

顯示結(jié)果如圖5-10所示,它將拆分的B、G、R三個通道的顏色分量進行了合并,接著顯示合并后的圖像。

同時,可以調(diào)用該函數(shù)提取圖像的不同顏色,比如提取B顏色通道,G、B通道設置為0。代碼如下所示:

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2
import numpy as np

#讀取圖片
img = cv2.imread("luo.png")
rows, cols, chn = img.shape

#拆分通道
b = cv2.split(img)[0]

#設置g、r通道為0
g = np.zeros((rows,cols), dtype=img.dtype)
r = np.zeros((rows,cols), dtype=img.dtype)

#合并通道
m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)
? ? ? ? ? ?
#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

此時顯示的圖像為藍色通道,如圖5-11所示,其他顏色的通道方法也類似。

五.圖像類型轉(zhuǎn)換

在日常生活中,我們看到的大多數(shù)彩色圖像都是RGB類型,但是在圖像處理過程中,常常需要用到灰度圖像、二值圖像、HSV、HSI等顏色。圖像類型轉(zhuǎn)換是指將一種類型轉(zhuǎn)換為另一種類型,比如彩色圖像轉(zhuǎn)換為灰度圖像、BGR圖像轉(zhuǎn)換為RGB圖像。OpenCV提供了200多種不同類型之間的轉(zhuǎn)換,其中最常用的包括3類,如下:

  • cv2.COLOR_BGR2GRAY
  • cv2.COLOR_BGR2RGB
  • cv2.COLOR_GRAY2BGR

OpenCV提供了cvtColor()函數(shù)實現(xiàn)這些功能。其函數(shù)原型如下所示:

dst = cv2.cvtColor(src, code[, dst[, dstCn]])

– src表示輸入圖像,需要進行顏色空間變換的原圖像

– dst表示輸出圖像,其大小和深度與src一致

– code表示轉(zhuǎn)換的代碼或標識

– dstCn表示目標圖像通道數(shù),其值為0時,則有src和code決定

該函數(shù)的作用是將一個圖像從一個顏色空間轉(zhuǎn)換到另一個顏色空間,其中,RGB是指Red、Green和Blue,一副圖像由這三個通道(channel)構成;Gray表示只有灰度值一個通道;HSV包含Hue(色調(diào))、Saturation(飽和度)和Value(亮度)三個通道。在OpenCV中,常見的顏色空間轉(zhuǎn)換標識包括CV_BGR2BGRA、CV_RGB2GRAY、CV_GRAY2RGB、CV_BGR2HSV、CV_BGR2XYZ、CV_BGR2HLS[3]。

下面是調(diào)用cvtColor()函數(shù)將圖像進行灰度化處理的代碼。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2 ?
import numpy as np ?
import matplotlib.pyplot as plt
?
#讀取圖片
src = cv2.imread('luo.png')

#圖像類型轉(zhuǎn)換
result = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

#顯示圖像
cv2.imshow("src", src)
cv2.imshow("result", result)

#等待顯示
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結(jié)果如圖5-12所示,它將左邊的彩色圖像轉(zhuǎn)換為右邊的灰度圖像,更多灰度轉(zhuǎn)化算法將在后面的文章詳細介紹。

同樣,可以調(diào)用下列核心代碼將彩色圖像轉(zhuǎn)換為HSV顏色空間,如圖5-13所示。

grayImage = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)

下面代碼對比了九種常見的顏色空間,包括BGR、RGB、GRAY、HSV、YCrCb、HLS、XYZ、LAB和YUV,并循環(huán)顯示處理后的圖像。

# -*- coding:utf-8 -*-
# By:Eastmount
import cv2 ?
import numpy as np ?
import matplotlib.pyplot as plt

#讀取原始圖像
img_BGR = cv2.imread('luo.png')

#BGR轉(zhuǎn)換為RGB
img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)

#灰度化處理
img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)

#BGR轉(zhuǎn)HSV
img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)

#BGR轉(zhuǎn)YCrCb
img_YCrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)

#BGR轉(zhuǎn)HLS
img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)

#BGR轉(zhuǎn)XYZ
img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)

#BGR轉(zhuǎn)LAB
img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)

#BGR轉(zhuǎn)YUV
img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)

#調(diào)用matplotlib顯示處理結(jié)果
titles = ['BGR', 'RGB', 'GRAY', 'HSV', 'YCrCb', 'HLS', 'XYZ', 'LAB', 'YUV'] ?
images = [img_BGR, img_RGB, img_GRAY, img_HSV, img_YCrCb,
? ? ? ? ? img_HLS, img_XYZ, img_LAB, img_YUV] ?
for i in range(9): ?
? ?plt.subplot(3, 3, i+1), plt.imshow(images[i], 'gray') ?
? ?plt.title(titles[i]) ?
? ?plt.xticks([]),plt.yticks([]) ?
plt.show()

其運行結(jié)果如圖5-14所示:

六.總結(jié)

本章主要講解Python和OpenCV的圖像基礎處理,從讀取顯示圖像到讀取修改像素,從創(chuàng)建、復制、保存圖像到獲取圖像屬性合通道,再詳細講解了圖像算數(shù)與邏輯運算,包括圖像加法、減法、與運算、或運算、異或運算、非運算,最后講解了圖像融合和獲取圖像ROI區(qū)域及圖像類型轉(zhuǎn)換。本章知識為后續(xù)的圖像處理、圖像識別、圖像變換打下扎實基礎。

以上就是Python圖像處理之圖像融合與ROI區(qū)域繪制詳解的詳細內(nèi)容,更多關于Python圖像處理的資料請關注腳本之家其它相關文章!

相關文章

  • 使用Python實現(xiàn)一個優(yōu)雅的異步定時器

    使用Python實現(xiàn)一個優(yōu)雅的異步定時器

    在 Python 中實現(xiàn)定時器功能是一個常見需求,尤其是在需要周期性執(zhí)行任務的場景下,本文給大家介紹了基于 asyncio 和 threading 模塊,可擴展的異步定時器實現(xiàn),需要的朋友可以參考下
    2025-04-04
  • Python中字符串格式化的方法詳解

    Python中字符串格式化的方法詳解

    眾所周知,我們可以使用 print() 方法來輸出一個固定內(nèi)容的字符串,就像是 print("Hello, world!") 一樣,但是,在現(xiàn)實中,我們很多時候是需要輸出一些內(nèi)容不斷變化,或者內(nèi)容動態(tài)生成的字符串,本文將介紹如何按照需要,在Python中格式化一個字符串
    2023-10-10
  • PyCharm漢化安裝及永久激活詳細教程(靠譜)

    PyCharm漢化安裝及永久激活詳細教程(靠譜)

    開始你的Python,這里有靠譜的Pycharm漢化安裝詳細教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • pygame播放音樂的方法

    pygame播放音樂的方法

    這篇文章主要介紹了pygame播放音樂的方法,以兩個簡單實例形式分析了pygame播放MP3音樂的實現(xiàn)方法,需要的朋友可以參考下
    2015-05-05
  • python如何修改圖像的分辨率

    python如何修改圖像的分辨率

    這篇文章主要介紹了python如何修改圖像的分辨率問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 帶你一文搞懂Python文件的讀寫操作

    帶你一文搞懂Python文件的讀寫操作

    讀寫文件是最常見的IO操作,Python內(nèi)置了讀寫文件的函數(shù),下面這篇文章主要給大家介紹了關于Python文件讀寫操作的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Python實現(xiàn)的登錄驗證系統(tǒng)完整案例【基于搭建的MVC框架】

    Python實現(xiàn)的登錄驗證系統(tǒng)完整案例【基于搭建的MVC框架】

    這篇文章主要介紹了Python實現(xiàn)的登錄驗證系統(tǒng),結(jié)合完整實例形式分析了Python基于搭建的MVC框架進行登錄驗證操作的相關實現(xiàn)與使用技巧,需要的朋友可以參考下
    2019-04-04
  • 詳解python分布式進程

    詳解python分布式進程

    在本專題里,小編給大家講述了關于python分布式進程的相關知識點內(nèi)容,需要的朋友們參考下。
    2018-10-10
  • Python實戰(zhàn)整活之聊天機器人

    Python實戰(zhàn)整活之聊天機器人

    這篇文章主要介紹了Python實戰(zhàn)整活之聊天機器人,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python操作mysql中文顯示亂碼的解決方法

    python操作mysql中文顯示亂碼的解決方法

    這篇文章主要介紹了python操作mysql中文顯示亂碼的解決方法,是Python數(shù)據(jù)庫程序設計中經(jīng)常會遇到的問題,非常具有實用價值,需要的朋友可以參考下
    2014-10-10

最新評論

土默特左旗| 元阳县| 泸西县| 巴林左旗| 永安市| 城口县| 闵行区| 镇平县| 淳化县| 东乌珠穆沁旗| 新干县| 陆川县| 嘉峪关市| 台南县| 改则县| 寻甸| 正定县| 房产| 尼木县| 恭城| 青海省| 灵山县| 临泉县| 栾城县| 麻栗坡县| 全椒县| 和林格尔县| 大理市| 江北区| 汕头市| 故城县| 田林县| 阿鲁科尔沁旗| 永修县| 曲松县| 杭锦旗| 勐海县| 偏关县| 南昌县| 仁怀市| 淳安县|