/roi-

Error: Assertion failed (0 <= ** .x&& 0<= ** .width && ** .x + ** .width <= m.cols && 0 <= ** .y && 0<= **. height && **. y + ** .height < = m.rows) in Mat

Primary LanguageC

roi-尺寸问题解决方案

Error: Assertion failed (0 <= ** .x&& 0<= ** .width && ** .x + ** .width <= m.cols && 0 <= ** .y && 0<= **. height && **. y + ** .height < = m.rows) in Mat (**代表的roi,为了方便大家,我就重新抄一遍错误了,因为这样可能让别人更容易搜索到,更容易找到解决方案,不用发愁了,本次文章只给思路,代码写法因人而已。)

原因:本人出现此问题的原因是:采用了YOLO-V2做检测,然后得到bounding-box来构造矩阵。就是在构造矩阵是出现了问题,错误提示的也非常左上明显,可能造成的的原因有:

(1)框左上角坐标点的横坐标小于0; (2)框左上角的纵坐标小于0; (3)框宽度小于0; (4)框高度小于0; (5)框右下角坐标点的横坐标大于图片宽度; (6)框右下角纵坐标大于图片的高度;

以上的原因中最有可能的的是(5)(6),但是不排除出现其他,最好是把框全部打出来看看,请注意:下面是我提供解决这个问题的思路,由于代码因人而异,所以此处不提供示例代码,但是这个教程足够解决你这个问题了!

解决思路:

1.在构造bounding-box的代码后面添加一个过滤和修正bounding-box的准则;(以yolo-v2为例子,在image.c的文档里面的draw_detect中的left,right,top,bot的后面添加限制条件,由于本人的这个文档是修改过得,在这后面本人还重新够早了一遍bounding-box,所以下面写的东西会以我自己构造的框的标准来写,但是思路是一样的)

2.修正bounding-box的准则如下:             (1)如果 ((框左上角横坐标 + 框宽度)> (图片的宽度 -1)){ 框左上角横坐标 = 图片宽度 - (框宽度 + 1);}             (2)如果 ((框左上角纵坐标 + 框高度)> (图片的高度 -1)) { 框左上角纵坐标 = 图片高度 - (框高度 + 1);}             (3)如果 (框左上角横坐标  < 0){ 框左上角横坐标 =  0 ;}             (4)如果 (框左上角纵坐标  < 0){ 框左上角纵坐标 =  0 ;}                 (5)如果 (框宽度  < = 0){ 框宽度 =  1 ;}(请注意:框宽度大小不能为0,否则会在构造矩阵中报错)             (6)如果 (框高度  < = 0){ 框高度 =  1 ;}(请注意:框宽度大小不能为0,否则会在构造矩阵中报错)             (5)如果 (框宽度  > (图片宽度 - 1)){ 框宽度 =  1 ;}(请注意:此处是本作者在试验中添加的也许和前面的重叠)             (6)如果 (框高度 > (图片宽度 - 1)){ 框高度 = 1 ; }(请注意:此处是本作者在试验中添加的也许和前面的重叠)

以上是本作者为了解决问题所提出的建议,不见得都能适用,但是基本能够解决问题,如果有什么不正确的地方,请在下方评论区留言,本文章仅代表作者本人意见!