使用Python+opencv進行圖像處理
二條:9 個實用的 Shell 拿來就用腳本實例!! 三條:100 道 Linux 常見面試題!
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺回復(fù)【大禮包】送你Python自學(xué)大禮包

圖片處理庫準(zhǔn)備
?OpenCV Python 來處理圖片,安裝過程如下:
pip?install?opencv-python

在保持圖片細(xì)節(jié)不變的前提下,把圖片放大或者縮小。
其中img 是圖片對象,img.shape 表示圖片的形狀大小,分別是高、寬、通道數(shù)。
#?獲取圖片尺寸
img?=?cv2.imread("./pic1.jpg")
h,?w,?ch?=?img.shape
print(h,?w,?ch)
??
'''
1240?960?3
'''#?獲取圖片尺寸
img?=?cv2.imread("./pic1.jpg")
h,?w,?ch?=?img.shape
print('原圖尺寸:',?h,?w,?ch)
new_h?=?int(h?/?2)
new_w?=?int(w?/?2)
res?=?cv2.resize(img,?(new_w,?new_h),?interpolation=cv2.INTER_LINEAR)
cv2.imwrite('./half_pic1.jpg',?res)
#?獲取圖片尺寸
img?=?cv2.imread("./half_pic1.jpg")
h,?w,?ch?=?img.shape
print('縮半原圖尺寸:',?h,?w,?ch)
????
'''
原圖尺寸:1240 960 3
縮半原圖尺寸:620 480 3
'''

圖片裁剪
把圖片的局部形狀截取出來,這里我們截取小姐姐圖像,按照自己需求去掉前后左右多余邊框。
img?=?cv2.imread("./pic1.jpg")
h,?w,?ch?=?img.shape
print(h,?w,?ch)
#?(x0,y0)?(x1,y1)?矩陣
x0,?y0?=?200,?80
x1,?y1?=?880,?960
#?img?是一個按行掃描的矩陣
res?=?img[y0:y1,?x0:x1]
print('截取后?H,W=',?res.shape[:2])
cv2.imwrite('./pic.jpg',?res)
'''
1240?960?3
截取后?H,W=?(880,?680)
'''實際效果如下:


圖像組合
把兩個或者多個圖像進行堆疊、拼接。
準(zhǔn)備一個原圖 pic1.jpg,再準(zhǔn)備一個水印圖 img.png,目標(biāo)是把水印貼在人像圖的最右下方。
????#?讀取原始圖片
????image?=?cv2.imread('./pic1.jpg')
????(h,?w)?=?image.shape[:2]
????print("SOURCE",?image.shape)
????#?讀取水印
????imgsy?=?cv2.imread('./img.png')
????(h_sy,?w_sy)?=?imgsy.shape[:2]
????print("SHUIYIN",?imgsy.shape)
????#?定義原圖片選區(qū)
????roi?=?image[h?-?h_sy:h,?w?-?w_sy:w]
????#?原圖片選區(qū)和水印區(qū)融合,讓水印透明
????for?y?in?range(h_sy):
????????for?x?in?range(w_sy):
????????????p?=?imgsy[y,?x]
????????????if?(p[0],?p[1],?p[2])?==?(0,?0,?0):
????????????????imgsy[y,?x]?=?roi[y,?x]
????cv2.imwrite('./shuiyin+roi.png',?imgsy)
????#?選區(qū)范圍設(shè)定為融合后的水印
????image[h?-?h_sy:?h,?w?-?w_sy:?w]?=?imgsy
????cv2.imwrite('./pic_sy.jpg',?image)


評論
圖片
表情

