提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
一、邊界填充
- 邊界填充就是將圖片按一定的方法將圖片的四周向外填充并將圖片放大
- 因為opencv中的顏色通道不是RGB而是BGR,所以我們要用到之前講到的分割將顏色通道重新整合成RGB后再用matplotlib庫將其畫出
import cv2
import matplotlib.pyplot as plt
import numpy as np
# 導(dǎo)入圖片
img = cv2.imread('cat.jpg')
img = img[200:600,200:700]
b,g,r = cv2.split(img)
img = cv2.merge((r,g,b))
top_size,bottom_size,left_size,right_size = (50,50,50,50)
# 邊界填充
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT)
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REFLECT_101)
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_WRAP)
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_CONSTANT)
# 分別展示看到不同的效果
plt.subplot(231),plt.imshow(img,'gray'),plt.title('ORIGINAL') #原圖
plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')
plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')
plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')
plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')
plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')
plt.show()
- BORDER_REPLICATE : 復(fù)制法,也就是復(fù)制最邊緣像素
- BORDER_REFLECT:反射法,對感興趣的圖像中的像素在兩邊進行復(fù)制
- BORDER_REFLECT_101:反射法,也就是儀最邊緣像素為軸,對稱
- BORDER_WRAP:外包裝法
- BORDER_CONSTANT:常量法,常數(shù)值填充
各個方法效果展示如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-832947.html
二、圖像的融合
- cv2.resize(img,(長,高))
- cv2.addWeighted(img1,alpha1,img2,alpha2,b)
- alpha是權(quán)重,b為偏置項
- 公式為img = a1 ? * ? img1 + a2 ? * ? img2 + b
- 形成新的圖像
- 圖像融合時一定要保持兩張圖片的大小一樣
# 展示圖片函數(shù)
import cv2
import numpy as np
def show_img(name,img_path):
cv2.imshow(name,img_path)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import matplotlib.pyplot as plt
import numpy as np
import show_img #該包為自己寫的展示圖片功能
cat = cv2.imread('cat.jpg')
dog = cv2.imread('dog.jpg')
# print(cat+dog) #查看兩張圖片的大?。ú灰粯哟髸箦e提示)
cat = cv2.resize(cat,(889,500)) #調(diào)整兩張圖片大小一致(將大圖片改小)
# 圖像融合
add_img = cv2.addWeighted(cat,0.4,dog,0.6,0)
show_img.show_img('add',add_img) #展示圖片(可自己寫展示圖片那幾行代碼)
- 最終將貓和狗分別按一定的比例將其融合到一起。
文章來源地址http://www.zghlxwxcb.cn/news/detail-832947.html
三、 圖像閾值
- ret,dst = cv2.threshold(src,thresh,maxval,type)
- src:輸入圖,只能輸入單通道圖像,通常來說為灰度圖
- dst:輸出圖
- thresh:閾值
- maxval:當(dāng)像素點超過了閾值(或者小于閾值,根據(jù)type來決定),所賦予的值
- type:二值化操作的類型,包含一下五種類型:
- cv2.THRESH_BINARY:超過閾值部分取maxval,否則為0
- cv2.THRESH_BINARY_INV:上一個的反轉(zhuǎn)
- cv2.THRESH_TRUNC:大于閾值部分設(shè)為閾值,否則不變
- cv2.THRESH_TOZERO:大于閾值部分不改變,否則為0
- cv2.THRESH_TOZERO_INV:上一個的反轉(zhuǎn)
import cv2
import show_img
import matplotlib.pyplot as plt
import numpy as np
cat = cv2.imread('../data/cat.jpg')
cat = cat[200:700,200:700,:] #原圖太大了,這里只展示部分效果
cat_gray = cv2.imread('../data/cat.jpg',cv2.IMREAD_GRAYSCALE) #變成灰色圖
cat_gray = cat_gray[200:700,200:700]
# show_img.show_img('cat',cat)
#調(diào)整顏色通道
b,g,r = cv2.split(cat)
cat = cv2.merge((r,g,b))
#圖像閾值處理
ret,thresh1 = cv2.threshold(cat_gray,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(cat_gray,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(cat_gray,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(cat_gray,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(cat_gray,127,255,cv2.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [cat,thresh1,thresh2,thresh3,thresh4,thresh5]
# 展示不同方法進行的不同處理
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
- 效果展示(別忘了0是黑255是白哦)
到了這里,關(guān)于opencv(三)邊界填充、圖像融合、圖像閾值處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!