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

opencv與numpy的圖像基本操作

 更新時間:2019年03月08日 10:34:38   作者:鄒成卓  
這篇文章主要介紹了opencv與numpy的圖像基本操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1. 像素基本操作

1.1 讀取、修改像素

可以通過[行,列]坐標(biāo)來訪問像素點數(shù)據(jù),對于多通道數(shù)據(jù),返回一個數(shù)組,包含所有通道的值,對于單通道數(shù)據(jù)(如gray),返回指定坐標(biāo)的值,也可以通過 [行,列,通道index] 來訪問某坐標(biāo)某通道的值。

>>> import cv2
>>> import numpy as np
>>> img = cv2.imread('messi5.jpg')
>>> px = img[100,100]
>>> print( px )
[157 166 200]
# accessing only blue pixel
>>> blue = img[100,100,0]
>>> print( blue )
157

可以直接通過坐標(biāo)修改像素值

>>> img[100,100] = [255,255,255]
>>> print( img[100,100] )
[255 255 255]

然而直接像上面這樣去讀取、修改每個像素的值,效率是比較低的,可以使用下面的方法,效率是更高的

# accessing RED value
>>> img.item(10,10,2)
59
# modifying RED value
>>> img.itemset((10,10,2),100)
>>> img.item(10,10,2)
100

1.2 讀取圖像屬性

讀取圖像尺寸,返回一個元組 (行,列,通道數(shù))

>>> print( img.shape )
(342, 548, 3)

讀取像素大小, 行 通道數(shù)

>>> print( img.size )
562248

像素數(shù)據(jù)類型

>>> print( img.dtype )
uint8

1.3 圖像ROI操作

可以直接編輯像素區(qū)域,例如把圖像左下角50*50的像素復(fù)制到左上角

import cv2
import numpy as np
img = cv2.imread("test.jpg")
print(img.shape)
roiTest = img[475:525, 0:50]
img[0:50, 0:50] = roiTest
cv2.imshow("image",img)
cv2.waitKey(0)

1.4 分割、合并通道

有些情況下需要對圖像的某一通道數(shù)據(jù)進(jìn)行操作,此時會用到分割、合并通道數(shù)據(jù)

>>> b,g,r = cv2.split(img)
>>> img = cv2.merge((b,g,r))

或者

b = img[:,:,0]

假設(shè)想編輯紅色通道的數(shù)據(jù),全部設(shè)置為0,不需要這樣分割后編輯, img[:,:,2] = 0 這樣即可。cv2.split操作是一個很耗時的操作,可以用numpy索引替代的操作,盡量用numpy索引來做。

1.4 生成圖像邊框

使用 cv2.copyMakeBorder 函數(shù)可添加圖像邊框,支持多種邊框算法

void cv::copyMakeBorder ( 
InputArray src, //原圖
//目標(biāo)圖(cpp版本中,若傳入此數(shù)據(jù)且選BORDER_TRANSPARENT,則此數(shù)據(jù)被top/bottom/left/right切出來的roi部分不會被做任何修改,此圖像大小=dst.rows+top+bottom,dst.cols+left+right)
OutputArray dst, 
int top, //top/left/bottom/right 四個方向上的邊框像素
int bottom,
int left,
int right,
int borderType, //邊框類型見下圖
const Scalar & value = Scalar() //邊框類型為BORDER_CONSTANT時的邊框像素
) 

BLUE = [255, 0, 0]
 img1 = cv2.imread("test.jpg")
 replicate = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REPLICATE)
 reflect = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT)
 reflect101 = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT_101)
 wrap = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_WRAP)
 constant = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_CONSTANT, value=BLUE)
 print(img1.shape, reflect.shape)
 plt.subplot(231), plt.imshow(img1, 'gray'), plt.title('ORIGINAL')
 plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
 plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
 plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
 plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
 plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
 plt.show()

 

上面的例子可以比較直觀的看到各種border的效果,同時也能發(fā)現(xiàn),python版的api與cpp版本的相比,默認(rèn)初始化了一塊原始圖尺寸+各方向邊框尺寸的圖像內(nèi)存,作為內(nèi)置的dst參數(shù)。

輸出尺寸:(525, 700, 3) (725, 900, 3)

2. 圖像的基本算術(shù)操作

2.1 圖像相加

圖像相加,兩個圖像應(yīng)該有相同的shape,或者圖像和一個標(biāo)量相加,或者圖像和一個與其通道數(shù)相同的一維數(shù)組相加。

opencv的相加與numpy相加時,在超出數(shù)據(jù)類型范圍時的處理不同

>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print( cv2.add(x,y) ) # 250+10 = 260 => 255
[[255]]
>>> print( x+y )  # 250+10 = 260 % 256 = 4
[4]

cpp版本的api還支持mask等參數(shù)

void cv::add ( 
InputArray src1,
InputArray src2,
OutputArray dst,
InputArray mask = noArray(),
int dtype = -1 
) 

2.2 圖像混合

opencv通過 cv::addWeighted 函數(shù)提供了將兩個圖像混合在一起的方法

dst=α⋅img1+β⋅img2+γ

img1 = cv2.imread('ml.png')
img2 = cv2.imread('opencv-logo.png')
dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

通過cv2.seamlessClone函數(shù)還能做更精細(xì)的圖像局部融合。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中文文本切詞Kmeans聚類

    python中文文本切詞Kmeans聚類

    這篇文章主要為大家介紹了python中文文本切詞Kmeans聚類的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Python?Pytorch學(xué)習(xí)之圖像檢索實踐

    Python?Pytorch學(xué)習(xí)之圖像檢索實踐

    隨著電子商務(wù)和在線網(wǎng)站的出現(xiàn),圖像檢索在我們的日常生活中的應(yīng)用一直在增加。圖像檢索的基本本質(zhì)是根據(jù)查詢圖像的特征從集合或數(shù)據(jù)庫中查找圖像。本文將利用Pytorch實現(xiàn)圖像檢索,需要的可以參考一下
    2022-04-04
  • python中使用PIL制作并驗證圖片驗證碼

    python中使用PIL制作并驗證圖片驗證碼

    本篇文章給大家分享了python中使用PIL制作并驗證圖片驗證碼的具體代碼以及說明,需要的朋友參考下吧。
    2018-03-03
  • TensorFlow固化模型的實現(xiàn)操作

    TensorFlow固化模型的實現(xiàn)操作

    這篇文章主要介紹了TensorFlow固化模型的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 關(guān)于Python元祖,列表,字典,集合的比較

    關(guān)于Python元祖,列表,字典,集合的比較

    下面小編就為大家?guī)硪黄P(guān)于Python元祖,列表,字典,集合的比較。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python Sqlite3以字典形式返回查詢結(jié)果的實現(xiàn)方法

    Python Sqlite3以字典形式返回查詢結(jié)果的實現(xiàn)方法

    下面小編就為大家?guī)硪黄狿ython Sqlite3以字典形式返回查詢結(jié)果的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • python3 wechatpy微信支付的項目實踐

    python3 wechatpy微信支付的項目實踐

    本文主要介紹了python3 wechatpy微信支付的項目實踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python K最近鄰從原理到實現(xiàn)的方法

    Python K最近鄰從原理到實現(xiàn)的方法

    這篇文章主要介紹了Python K最近鄰從原理到實現(xiàn)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python讀取Excel的方法實例分析

    Python讀取Excel的方法實例分析

    這篇文章主要介紹了Python讀取Excel的方法,實例分析了Python操作Excel文件的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-07-07
  • Python使用Flask框架獲取當(dāng)前查詢參數(shù)的方法

    Python使用Flask框架獲取當(dāng)前查詢參數(shù)的方法

    這篇文章主要介紹了Python使用Flask框架獲取當(dāng)前查詢參數(shù)的方法,實例分析了query_string獲取查詢參數(shù)的技巧,需要的朋友可以參考下
    2015-03-03

最新評論

绩溪县| 滁州市| 临泉县| 轮台县| 莱州市| 滦平县| 海南省| 崇仁县| 富平县| 合阳县| 扎囊县| 灵台县| 景德镇市| 巨鹿县| 潮安县| 息烽县| 江华| 太保市| 吉隆县| 金堂县| 兴山县| 封开县| 仲巴县| 茶陵县| 岳阳市| 梓潼县| 库车县| 历史| 准格尔旗| 融水| 桃园县| 钦州市| 莲花县| 如东县| 沭阳县| 旬邑县| 鹰潭市| 克拉玛依市| 寿光市| 和田市| 宝应县|