openCV基礎,基於Python

1. 圖像的讀取,顯示和保存

首先在python中安裝opencv, 在終端命令行輸入pip install opencv-python 即可。
#導入cv2的庫
import cv2 as cv
#圖像讀取
img = cv.imread(“img.jpg”)
#顯示圖像
cv.imshow(“img”, img)
#使圖像持久顯示在桌面上
cv.waitKey(0)
cv.destroyAllWindows()
#將圖像保存到pictures 目錄下,名稱爲pic.jpg
cv.imwrite(“pictures/pic.jpg”, img)

2.像素值的讀取

  1. 圖像可以分爲二值圖像, 灰度圖像, 彩色圖像。
    二值圖像的像素值非黑即白。
    灰度圖像的像素值在0-255之間,只有一個通道。
    彩色圖像的像素值也在0-255之間, 由三個通道組成,在opencv中分別是G,B, R 即綠藍紅。
    獲取圖像的某快區域,並將改變其像素。
    在這裏插入圖片描述
    在這裏插入圖片描述
import cv2 as cv 
import numpy as np 
img = cv.imread("java.jpg")
img[100: 150, 100: 150] = 255
cv.imwrite("java_changd.jpg", img)
cv.imshow("img_changed", img)
cv.waitKey(0)
cv.destroyAllWindows()
  1. 獲取單個像素點
    灰度圖像
import cv2 as cv 
import numpy as np 
#cv.IMREAD_GRAYSCALE,這個參數表示以灰度圖方式讀入,也可以直接寫0代替。 寫這個參數默認以彩色形式讀入,這時候不會將灰色圖自動上色,而是將單通單轉成三通道。
img = cv.imread("java.jpg", cv.IMREAD_GRAYSCALE)
#使用img.item() 來讀取像素點,參數是座標值
pix = img.item(45, 50)
print(pix) # 2
import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")

#彩色圖像有三個通道,blue讀取藍色通道的像素點,green 讀取green通道的像素值
blue = img.item(45, 45, 0)
green = img.item(45, 45, 1)
red = img.item(45, 45, 2)
print(blue)
print(green)
print(red)
#打印結果
#
5
3
2

3. 獲取圖像的屬性

得到圖像的形狀,總的像素的大小,像素的數據類型

import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")
print(img.shape) #圖片的形狀
print(img.size)#圖像大小,長度, 寬度和高度乘積
print(img.dtype)#0-255是無符號的8位二進制

"""
(300, 532, 3)
478800
uint8
"""

彩色圖像的通道拆分

import cv2 as cv 
import numpy as np 

img = cv.imread("java.jpg")
#分別取出圖像的三個通道的值,每個通道是2維的
blue, green, red = cv.split(img)
print(blue.shape)
print(green.shape)
print(red.shape)
cv.imshow("img", img)
cv.imshow("blue", blue)
cv.imshow("green", green)
cv.imshow("red", red)
cv.waitKey(0)
cv.destroyAllWindows()

4. 像素的運算

圖像放縮 ,修改圖像的大小cv.resize()

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
# 第一種方法, 直接輸入原圖像的要修改的大小
resize1 = cv.resize(img1, (300, 300))
# 第二種方法,按照比例縮放,None表示不指定新的shape, 而是通過比例縮放
resize2 = cv.resize(img1, None, fx=1.2, fy=0.5)

print(resize1.shape)
print(resize2.shape)
cv.waitKey(0)
cv.destroyAllWindows()

將兩幅圖像進行加法運算,np.add() 和cv2.add() 都可以完成加法預案算, 但結果有所不同, np.add() 會將加法運算後超過255的像素進行取模運算, 如結果是256 , 則爲了避免像素值在0-255之間, 會進行取模運算, 即 256 % 255 = 1.
cv2.add() 會把超過255的值當做255處理

image1
在這裏插入圖片描述

image2
在這裏插入圖片描述
np.add() 的結果
在這裏插入圖片描述

cv.add() 的結果
在這裏插入圖片描述

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
img2 = cv.imread("yese.jpg")
# cv.resize() 修改圖像的大小,在進行運算之前要先將圖像修剪成統一大小
img1 = cv.resize(img1, (300, 300))
img2 = cv.resize(img2, (300, 300))

add1 = np.add(img1, img2)
add2 = cv.add(img1, img2)


cv.imshow("img1", img1)
cv.imshow("img2", img2)
cv.imshow("add1", add1)
cv.imshow("add2", add2)
cv.imwrite("add1.jpg", add1)
cv.imwrite("add2.jpg", add2)
cv.waitKey(0)
cv.destroyAllWindows()

圖像融合
使用cv.addWeighted()將兩幅圖像進行加權融合。
在這裏插入圖片描述

import cv2 as cv 
import numpy as np 

# read images
img1 = cv.imread("java.jpg")
img2 = cv.imread("yese.jpg")
img1 = cv.resize(img1, (300, 300))
img2 = cv.resize(img2, (300, 300))
# img1 * 0.3 + img2 * 1 , 最後一個參數表示亮度調整, 0代表不做改變, 也不能省略
add = cv.addWeighted(img1, 0.3, img2, 1, 0)
cv.imwrite("add.jpg", add)
cv.imshow("add_weighted", add)
cv.waitKey(0)
cv.destroyAllWindows()

圖像翻轉
cv.flip()

import cv2 as cv 
import numpy as np 
# read images
img = cv.imread("java.jpg")
# 第二個參數控制翻轉的方向
img1 = cv.flip(img, 1)
cv.imshow("img", img)
cv.imshow("img1", img1)
cv.imwrite("flip.jpg", img1)
cv.waitKey(0)
cv.destroyAllWindows()

原圖
在這裏插入圖片描述
翻轉後的圖像
在這裏插入圖片描述

import cv2 as cv 
import numpy as np 

# read images
img = cv.imread("java.jpg")
# 第二個參數控制翻轉的方向
img1 = cv.flip(img, 0)
cv.imshow("img", img)
cv.imshow("img1", img1)
cv.imwrite("flip.jpg", img1)
cv.waitKey(0)
cv.destroyAllWindows()

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章