opencv去除图片黑边,黑色背景
问题:对于这样的一张图片,想去除它的黑边。解决:1、简单赋值,把黑色像素变成白色。但是因为前景也有黑色的像素,且黑色范围是变化的不是一个固定的像素值,效果不好。2、漫水填充:cv.floodFill()官方文档:https://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=f
·
问题:对于这样的一张图片,想去除它的黑边。

解决:
1、简单赋值,把黑色像素变成白色。但是因为前景也有黑色的像素,且黑色范围是变化的不是一个固定的像素值,效果不好。
2、漫水填充:cv.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
一些解释:
将图片转为二值化,黑色的像素就不会存在一个范围,而是一个固定的值。
获取宽高,是为了可以对图片的四个角都做一次填充,将黑色变成白色。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)