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官方教材文檔