二 OpenCV 圖像的基礎操作


1·獲取像素並修改

import cv2 as cv

import numpy as np

img = cv.imread('E:\\fruits.jpg')

##print(img)     

px = img[100,100]#獲取第100行第100列的3維矩陣

print(px)

print(img[100,100,2])#獲取矩陣值

val =[ i for i in img[100,100] ]#遍歷矩陣

print(val)

 

print(img.item(100,100,2))#快速獲取矩陣值

img.itemset((100,100,2),99)#快速修改矩陣值

print(img[100,100])

 

 

2·獲取圖像的屬性信息

           獲取到屬性信息有:

          

 

        

 

import cv2 as cv

import numpy as np

 

img = cv.imread('E:\\fruits.jpg')

print(img.shape)

 

3·圖像通道的合並和拆分

           #局部區域賦值

import cv2 as cv

import numpy as np

#deal

img = cv.imread('E:\\fruits.jpg')

print(img.shape)

area = img[280:340,330:390]#選中區域280行-340行,330列-360列

img[273:333,100:160] = area#將該區域修改值

#show

cv.namedWindow('IMG')

cv.imshow('IMG',img)

cv.waitKey(0)

cv.destroyAllWindows()

 

 

           #通道合並、拆分、修改               

import cv2 as cv

import numpy as np

#deal

img = cv.imread('E:\\fruits.jpg')

 

b,g,r = cv.split(img)#分離

img = cv.merge([b,g,r])#合並

#for i in img[:,:,0]:print(i)

 

img[:,:,0] = 0 #改變R通道值

img[:,:,1] = 0 #改變G通道值

img[:,:,2] = 0 #改變B通道值

 

#show

cv.namedWindow('IMG')

cv.imshow('IMG',img)

cv.waitKey(0)

cv.destroyAllWindows()

 

4·圖形填充

           函數:cv.copyMakeBorder()

                   例子:略

  • ·圖像的算術運算

         兩個圖形的大小,數據類型一致才可以進行運算,運算結果越界則取余數

         #直接運算

例:        

import cv2 as cv

import numpy as np

 

x = np.uint8([250])

y = np.uint8([10])

z = np.uint16(65537)

 

print(cv.add(x,y))# 250+10 = 260 => 255

print(x+y)# 250+10 = 260 % 256 = 4

print(z)#65537%2^16 = 1

        

         #圖形混合:

算法一 :cv.addWeighted()   g (x) = (1 − α)  (x) + α (x)  其中α為透明度

例如:    

 

import cv2 as cv

import numpy as np

#兩個大小、數據類型一致的圖像

imgf1 = cv.imread('E:\\fruits.jpg')

imgf2 = cv.imread('E:\\fruits_copy.jpg')

 

dst = cv.addWeighted(imgf1,0.3,imgf2,0.7,0)#目標圖像

 

cv.namedWindow('IMG')

cv.imshow('IMG',dst)

cv.waitKey(0)

cv.destroyAllWindows()

 

        

          #圖形合並:在圖片上加圖標、水印、文字等        

 

import cv2 as cv

import numpy as np

#兩個大小、數據類型一致的圖像

img1 = cv.imread('E:\\fruits.jpg')

img2 = cv.imread('E:\\logo.jpg')

 

rows,cols ,channels = img2.shape

roi = img1[0:rows,0:cols]

img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)

ret,mask = cv.threshold(img2gray,175,255,cv.THRESH_BINARY)#峰值,掩碼

mask_inv = cv.bitwise_not(mask)#按位not操作

 

img1_bg = cv.bitwise_and(roi,roi,mask)

img2_fg = cv.bitwise_and(img2,img2,mask=mask_inv)

 

dst = cv.add(img1_bg,img2_fg)

img1[0:rows,0:cols] = dst

 

cv.namedWindow('IMG')

cv.imshow('IMG', img1)

cv.waitKey(0)

cv.destroyAllWindows()

 

 

 

 

參考 OpenCv官方教材文檔

1.http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_table_of_contents_gui/py_table_of_contents_gui.html#


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM