2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019
Opencv之图像分割原理:https://www.jianshu.com/p/4ffdf060fe57
掩膜操作:https://blog.csdn.net/u011028345/article/details/77278467
生成边界框box:https://blog.csdn.net/sinat_36458870/article/details/78825571
介绍:https://blog.csdn.net/hjxu2016/article/details/77833336
几种方法介绍:https://blog.csdn.net/on2way/article/details/46812121
关于阈值设定:https://blog.csdn.net/on2way/article/details/46812121
opencv绘制轮廓的外接矩形和圆:https://jingyan.baidu.com/article/c74d6000d6a2f40f6a595ddf.html
cv2.findContours:
参数
第一个参数是寻找轮廓的图像;
第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):
cv2.RETR_EXTERNAL表示只检测外轮廓
cv2.RETR_LIST检测的轮廓不建立等级关系
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
cv2.RETR_TREE建立一个等级树结构的轮廓。
第三个参数method为轮廓的近似办法
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
源码:
def box_detect():
img = cv2.imread('1/input4w.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 100, 150, cv2.THRESH_BINARY) # 灰度阈值
# 对binary去噪,腐蚀与膨胀
binary = cv2.erode(binary, None, iterations=2)
binary = cv2.dilate(binary, None, iterations=2)
cv2.imwrite('temp_img/binary.jpg', binary)
# contours是轮廓本身,hierarchy是每条轮廓对应的属性。
# cv2.RETR_TREE建立一个等级树结构的轮廓。cv2.CHAIN_APPROX_SIMPLE矩形轮廓只需4个点来保存轮廓信息
_, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
min_num = 250000
max_num = 2700 * 4000
for contour in contours[1:]:
x, y, w, h = cv2.boundingRect(contour) # 外接矩形
if (w * h) > min_num:
if (w * h) < max_num:
out = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite('temp_img/1-box.jpg', out)
print('find box')