python获取灰度图边界

最近接入百度云的人像分割接口,返回人像分割好的图片和灰度图,但是接口返回的图片是按源图片的尺寸返回,业务需求是只要人像大小的图片

源图:

百度云API返回(按照源图的尺寸返回了):

百度云还返回了灰度图:

业务需求是只要人像大小的图片返回,需求是返回这样的:

因此需要对百度云返回的图片进行裁剪。

解决思路:通过百度云返回的灰度图找到图像边框信息,然后对百度云返回的图片进行裁剪即可

python获取图像边框效果:

通过cv2即可实现,代码:

import cv2
import numpy as np

validate_img_path = 'xxx.png' # 灰度图地址
img = cv2.imread(validate_img_path)
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
# 因为cv2版本不同返回的参数个数不同,所以下面用了兼容写法
try:
	im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
except Exception as r:
	contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

min_width = 100
min_height = 100
result_count = len(contours) # 检索边界有时候会不止一个结果,所以需要循环检查多个结果
if result_count == 1:
	x, y, w, h = cv2.boundingRect(contours[0]) # 将边界结果转成坐标信息
else:
	for i in range(result_count):
		x, y, w, h = cv2.boundingRect(contours[i])
		if w >= min_width and h >= min_height:
			break

print(x, y, w, h)

参考:https://www.jb51.net/article/164488.htm

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值