opencv去除圖片黑邊,黑色背景

問題:對於這樣的一張圖片,想去除它的黑邊。

 

解決:

1、簡單賦值,把黑色像素變成白色。但是因爲前景也有黑色的像素,且黑色範圍是變化的不是一個固定的像素值,效果不好。

2、漫水填充:cv.floodFill()

官方文檔:https://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=floodfill

使用示例:

###清除黑色背景
def ClearBackGround(img):
    gray_img = cv.cvtColor(img, cv.COLOR_RGB2GRAY) #灰度圖
    height, width = gray_img.shape #獲取圖片寬高
    (_, blur_img) = cv.threshold(gray_img, 127, 255, cv.THRESH_BINARY) #二值化 固定閾值127
    
    #去除黑色背景,seedPoint代表初始種子,進行四次,即對四個角都做一次,可去除最外圍的黑邊
    blur_img = cv.floodFill(blur_img,mask=None,seedPoint=(0,0),newVal=(255,255,255))[1]
    blur_img = cv.floodFill(blur_img, mask=None, seedPoint=(0,height-1), newVal=(255, 255, 255))[1]
    blur_img = cv.floodFill(blur_img, mask=None, seedPoint=(width-1, height-1), newVal=(255, 255, 255))[1]
    blur_img = cv.floodFill(blur_img, mask=None, seedPoint=(width-1, 0), newVal=(255, 255, 255))[1]

    cv.imshow("clear_background", blur_img)
    return blur_img

一些解釋:

將圖片轉爲二值化,黑色的像素就不會存在一個範圍,而是一個固定的值。

獲取寬高,是爲了可以對圖片的四個角都做一次填充,將黑色變成白色。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章