之前一直在matlab上用这个函数,现在转移到python上面使用
————————————————————————————————————
1、代码
I = cv2.cvtColor(I, cv2.COLOR_BGR2GRAY);
mser = cv2.MSER_create()
regions,boxes = mser.detectRegions(I)
for box in boxes:
x, y, w, h = box
cv2.rectangle(I, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow("box", I)
cv2.waitKey(0)
2、效果
————————————————————————————————————
输入限制条件
在matlab当中,mser的方法中的输入特征包括:'ThresholdDelta'、'RegionAreaRange'等,一共四个参数,不过我只用到了这两个,强度阈值步长可以很好的控制特征数量,特征区域大小则规避很大一部分在特征大小的明显不符合当前目标条件的数据。
因此我想要在python中也对数据在算法运行过程中进行初步的筛选限制。
1、代码
mser = cv2.MSER_create(_min_area=400, _max_variation=0.7)
regions,boxes = mser.detectRegions(I)
2、结果
3、参数详解
参数:
_delta - 为灰度值的变化量,即公式1和2中的△;
_min_area - 修剪比minArea小的区域
_max_area - 修剪比maxArea更大的区域
_max_variation - 为最大的变化率,即如果公式1和2中的q(i)小于该值,则被认为是最大稳定极值区域;
_min_diversity - 为稳定区域的最小变换量。
_max_evolution - 用于彩色图像的演变步骤
_area_threshold - 对于彩色图像,将导致重新初始化的区域阈值
_min_margin - 对于彩色图像,忽略太小的边距
_edge_blur_size - 对于彩色图像,边缘模糊的光圈大小
————————————————————————————————————
输出数据
在matlab当中输出数据的属性一共有20多个,其中boundingbox,centrior,等参数在后期的特征选择中将会起到重要的检测作用。
由于mserdetectRegions函数只返回regions和boxes两个参数,所以其他数据需要通过regions获取
regions,boxes = mser.detectRegions(I)
im=I.copy()
for p in regions:
ellipse= cv2.fitEllipse(p)
cv2.ellipse(im, ellipse, (255, 255, 0), 2)
#ellipse当中的数据包括三行,第一行表示椭圆圆心,第二行表示长轴和短轴各自的长度,第三行表示椭圆的倾斜角度。
2、结果
————————————————————————————————————
参考网站:
(论坛)http://answers.opencv.org/question/19015/how-to-use-mser-in-python/
(实例)https://www.jianshu.com/p/1b9c275698c9
(实例)https://www.cnblogs.com/jkmiao/p/6797252.html
(函数详解)http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/
opencv_features2d.MSER.html#create-int-int-int-double-double-int-double-double-int-
(图形拟合)https://blog.csdn.net/qq_30909117/article/details/79164055