这是我自己写的程序,mask图像就是类似下面的图像,黑色部分为1,白色部分为255.
使用下面程序可以获得物体的位置.
import cv2
# 判断第y行中是否存在物体
def is_row_exist_object(image, y, xx):
for x in range(0, xx):
if image[y, x] > 128:
return True
return False
# 判断第x列是否存在物体
def is_col_exist_object(image, x, low_bound, high_bound):
for y in range(low_bound, high_bound + 1):
if image[y, x] > 128:
return True
return False
# 获取mask最上边的点,最左边点,最右边点以及最下面点的坐标
def get_res_list(fliename):
image = cv2.imread(fliename, cv2.IMREAD_GRAYSCALE)
yy, xx = image.shape
res_list = []
for up_y in range(0, yy):
if is_row_exist_object(image, up_y, xx):
res_list.append(up_y)
break
for y in range(0, yy):
down_y = yy - y - 1
if is_row_exist_object(image, down_y, xx):
res_list.append(down_y)
break
for left_x in range(0, xx):
if is_col_exist_object(image, left_x, res_list[0], res_list[1]):
res_list.append(left_x)
break
for x in range(0, xx):
right_x = xx - x - 1
if is_col_exist_object(image, right_x, res_list[0], res_list[1]):
res_list.append(right_x)
break
res = [res_list[2], res_list[0], res_list[3], res_list[1]]
return res
算法速度很快,但是只适用于一幅图像仅有一个物体的情况或没有物体.
转载请附上链接