Qt 用【模板匹配】搜索ROI区域

1 读取图片

poolimg=imread(":/new/prefix1/0.bmp",CV_RGB2GRAY);//像这样从资源库里读不行,写绝对路径才能读
if(goalimg.empty())
    qDebug() << "凉了" << endl;

如果图片没有读取成功。原本的程序不会报错,而是表现为
qDebug() << “poolimg cols rows” <<poolimg.cols<<poolimg.rows<<endl;行和列读取为0
后续会有难以排查的麻烦。

然后在ui搞了一个滑动条用来更改检测模式【各种模式下检测出来的效果完全一样。。。】
ui会自动在头文件里加

private slots:
    void on_verticalSlider_valueChanged(int value);

然后就可以写回调函数

void MainWindow::on_verticalSlider_valueChanged(int value)
{

    //创建新图像内存
    int cols=poolimg.cols-goalimg.cols +1;
    int rows=poolimg.rows-goalimg.rows +1;

  // resultimg.create(cols,rows,CV_32FC1 );//有一个32位的有符号通道//【CV_8UC3 有3个通道,每个通道是8位的无符号数据】//黑色的400*400左右的窗口
resultimg.create(poolimg.dims,poolimg.size,poolimg.type());//灰色的原图大小的窗口
qDebug() << "poolimg.dims,poolimg.size," <<cols<<rows<<endl;
//imshow("createImg",resultimg);//其实就是个用来装结果的空盒子//显示出来康康

//进行匹配和标准化
    matchTemplate( poolimg, goalimg, resultimg,TM_CCOEFF_NORMED );
  // normalize( resultimg, resultimg, 0, 1, NORM_MINMAX, -1, Mat() );

 //   imshow ("resultimg",resultimg);
//保存数据
    double minVal; double maxVal; Point minLoc; Point maxLoc;

    minMaxLoc( resultimg, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
    qDebug() << "resultimg val" <<minVal<<maxVal<<endl;//-0.464084 0.915053
//数值越大匹配越好
    Point matchLoc;
      matchLoc = maxLoc;

//按照目标图片的大小画个矩形显示出来
     Mat img_display;
     poolimg.copyTo( img_display );

    rectangle( img_display, matchLoc, Point( matchLoc.x + goalimg.cols , matchLoc.y + goalimg.rows ), Scalar::all(0), 2, 8, 0 );
    rectangle( resultimg, matchLoc, Point( matchLoc.x + goalimg.cols , matchLoc.y + goalimg.rows ), Scalar::all(0), 2, 8, 0 );

    imshow( "final  image_window", img_display );
    imshow( "final  result_window", resultimg );
}

在这里插入图片描述

【CSDN】opencv模板匹配步骤及Code
【opencv官网】模板匹配
【CSDN】OpenCV基于形状的模板匹配
【CSDN】图像处理(8) :模板匹配【是halcon的库(是收费商用不公开源代码的机器视觉库)】
【CSDN】QT+opencv学习笔记(6)——模板匹配

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值