本文只是一種實現思路,當然PS很好用,希望大家能夠學習更多的知識,才分享了這個文章。更多精彩,請關注公眾號:【數據分析與統計學之美】
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 顯示圖像
cv2. imshow( 'img', img)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
效果如下:
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 圖像縮放
img = cv2. resize( img, None, fx = 0.5, fy = 0.5)
rows, cols, channels = img. shape
print( rows, cols, channels)
# 顯示圖像
cv2. imshow( 'img', img)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
結果如下:
三色圖片有RGB三個顏色通道,無法進行腐蝕和膨脹的操作。這個就需要我們將彩色圖片轉換為hsv灰度圖像後,再完成腐蝕和膨脹的操作。
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 圖像縮放
img = cv2. resize( img, 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)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
結果如下:
二值化處理是為了將圖片轉換為黑白圖片。二值化類似於1表示男、2表示女,對於圖像的處理我們也需要自定義一個最小值和最大值,這裡分別用lower_blue和upper_blue表示
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 圖像縮放
img = cv2. resize( img, 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)
# 圖片的二值化處理
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)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
結果如下:
缺點:我們觀察第三章圖片,發現黑色區域有時候會出現一些噪聲(白點),這裡可能顯示的不是很明顯,有的圖片顯示的很明顯,這就需要我們進行腐蝕或膨脹。
上面的圖象進行二值化後,出現了一些噪聲,我們可以采用腐蝕或膨脹進行圖片的處理,觀察哪種的處理效果好一些。
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 圖像縮放
img = cv2. resize( img, 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)
# 圖片的二值化處理
lower_blue = np. array([ 90, 70, 70])
upper_blue = np. array([ 110, 255, 255])
mask = cv2. inRange( hsv, lower_blue, upper_blue)
#腐蝕膨脹
erode = cv2. erode( mask, None, iterations = 1)
cv2. imshow( 'erode', erode)
dilate = cv2. dilate( erode, None, iterations = 1)
cv2. imshow( 'dilate', dilate)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
結果如下:
觀察上圖:對於這個圖片,無論是腐蝕或膨脹,都起到了很好的去圖片噪聲的操作,我們使用腐蝕後的圖片也可以,我們使用膨脹後的圖片也可以。
圖片是由每一個像素點組成的,我們就是要找到腐蝕後得到圖片的,白色底色處的像素點,然後將原圖中對應位置處的像素點,替換為紅色。
import cv2
import numpy as np
# 讀取照片
img = cv2. imread( 'girl.jpg')
# 圖像縮放
img = cv2. resize( img, 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)
# 圖片的二值化處理
lower_blue = np. array([ 90, 70, 70])
upper_blue = np. array([ 110, 255, 255])
mask = cv2. inRange( hsv, lower_blue, upper_blue)
#腐蝕膨脹
erode = cv2. erode( mask, None, iterations = 1)
cv2. imshow( 'erode', erode)
dilate = cv2. dilate( erode, None, iterations = 1)
cv2. imshow( 'dilate', dilate)
#遍歷替換
for i in range( rows):
for j in range( cols):
if erode[ i, j] == 255: # 像素點為255表示的是白色,我們就是要將白色處的像素點,替換為紅色
img[ i, j] =( 0, 0, 255) # 此處替換顏色,為BGR通道,不是RGB通道
cv2. imshow( 'res', img)
# 窗口等待的命令,0表示無限等待
cv2. waitKey( 0)
效果如下: