python-图像边缘化处理
本文由本人原創(chuàng),僅作為自己的學(xué)習(xí)記錄
主要利用Sobel,用作邊緣檢測,它是一離散性差分算子,用來運算圖像亮度函數(shù)的灰度值。在圖像的任何一點使用此算子,將會產(chǎn)生對應(yīng)的灰度矢量或是其法矢量。
Sobel邊緣檢測通常帶有方向性,可以只檢測豎直邊緣或垂直邊緣或都檢測。
本文先對圖片進行大小處理,使得都是一個大小的圖片
然后從XY兩個方向檢測,然后利用addweight進行圖像混合
然后設(shè)置閾值,進行圖像二值化處理,本,文中設(shè)置的是100,如果原灰度值大于100,把灰度值設(shè)為0(黑色),因為邊緣為白色要變成黑色,如果小于100,設(shè)為255(白色)THRESH_BINARY_INV(二值化取反)
下面是代碼
#coding=utf-8 ?
import cv2 as cv
import os
import matplotlib.pyplot as plt
def set_img_size(path,file):
? ? src_img = cv.imread(file, cv.IMREAD_GRAYSCALE)
? ? dst_img= cv.resize(src_img,(220,350))
? ? cv.imwrite(path+'\\2_tmp.jpg',dst_img)
? ? return path+'\\2_tmp.jpg'
if __name__=="__main__":
? ? path=os.getcwd()
? ? file = path+'\\2.jpg'
? ? file_name = set_img_size(path,file)
? ? sobel_img = cv.imread(file_name, cv.IMREAD_GRAYSCALE)
? ??
? ? x= cv.Sobel(sobel_img,cv.CV_16S,1,0)#x方向邊緣檢測
? ? y= cv.Sobel(sobel_img,cv.CV_16S,0,1)
? ? #x,y方向分辨轉(zhuǎn)換為uint8(8位無符號)類型
? ? ux = cv.convertScaleAbs(x)
? ? uy = cv.convertScaleAbs(y)
? ? #x,y合并
? ? sb_img = cv.addWeighted(ux,0.5,uy,0.5,0)
? ??
? ? #設(shè)置閾值,如果原值大于100,設(shè)為0,因為邊緣為白色要變成黑色,如果小于100,設(shè)為255?
? ? retval,sb_img = cv.threshold(sb_img,100,255.0, cv.THRESH_BINARY_INV)
? ??
? ? cv.imshow("result",sb_img)
? ? #cv.waitKey(0) ?
? ? cv.destroyAllWindows()
? ? cv.imwrite(path+'\\2_result.jpg',sb_img)
總結(jié)
以上是生活随笔為你收集整理的python-图像边缘化处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dlopen failed: *.so
- 下一篇: websocket python爬虫_p