導入OpenCV庫,使用imread函數讀取圖片。
import cv2
import numpy as np
# 讀取照片並顯示
image=cv2.imread('yang.jpg')
cv2.imshow('image',image)
# 圖像縮放並顯示
img = cv2.resize(image,None,fx=0.5,fy=0.5)
rows,cols,channels = img.shape
print(rows,cols,channels)
cv2.imshow('img',img)
# 圖片轉換為灰度圖並顯示
hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('hsv',hsv)
通過cv2.inRange函數對圖片進行二值化操作,獲取背景的mask,二值化處理視為了將灰度圖片轉換為黑白圖片,如下圖將紅色的背景用白色表示,白色區域就是我們後面遍歷像素點替換的條件,就是將白色的區域替換為藍色。
cv2.inRange(hsv, lower_red, upper_red):在lower_red和upper_red兩個閾值內的像素值設置為白色(255),而不在閾值區間內的像素值設置為黑色(0)。
#將在兩個閾值內的像素值設置為白色(255),而不在閾值區間內的像素值設置為黑色(0)
lower_red= np.array([0,135,135])
upper_red = np.array([180,245,230])
mask = cv2.inRange(hsv, lower_red, upper_red)
# 顯示圖像
cv2.imshow('mask',mask)
# #藍底變紅底
# lower_blue = np.array([90,70,70])
# upper_blue = np.array([110,255,255])
# mask = cv2.inRange(hsv, lower_blue, upper_blue)
# 顯示圖像
# cv2.imshow('mask',mask)
#腐蝕膨脹
erode=cv2.erode(mask,None,iterations=1)
cv2.imshow('erode',erode)
dilate=cv2.dilate(erode,None,iterations=1)
cv2.imshow('dilate',dilate)
dilate[i,j]==255: 像素點為255表示的是白色,我們就要將白色處的像素點,替換為你想要的照片底色。
img[i,j]=(0,0,255): 此處替換顏色,為BGR通道,不是RGB通道,若是想要將紅底變成藍底img[i,j]=(255,0,0),若是想將藍底變為紅底則img[i,j]=(0,0,255),若是想變白底img[i,j]=(255,255,255)
# 遍歷每個像素點,進行顏色的替換
for i in range(rows):
for j in range(cols):
if dilate[i,j]==255: #像素點255表示白色
img[i,j]=(255,0,0) # 此處替換顏色,為BGR通道,不是RGB通道
cv2.imshow('res',img)
# 窗口等待的命令,0表示無限等待
cv2.waitKey(0)
文章都看完了不點個 嗎