opencv 图像识别程序

1.头文件

#pragma once

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include <iostream>
using namespace std;
using namespace cv;

enum DiColor{RED = 0,BLUE = 1};

class ZhuangJia
{
public:
    ZhuangJia();   

    //二值化
    void erZhiHua(const Mat &src, Mat &dst, uchar yz);

    //亮度调整
    void liangDuTiaoZheng(const Mat &src, Mat &dst, double k, double b);

    //寻找目标区域
    vector<RotatedRect> xunZhaoJuXing(const Mat &img);

    //拟合可能区域
    vector<RotatedRect> niHeMuBiao(vector<RotatedRect> vr);

    //寻找最佳目标区域
    RotatedRect xunZhaoZuiJia(vector<RotatedRect> vr);

    //画出目标区域
    void huaChuMuBiao(Mat img, RotatedRect vr);

    //计算距离,返回值越大,距离越大
    int jiSuanjuLi(const Mat &imgroi, int &yuzhi);
public:
    uchar huiDu;
    uchar diColor;//地方颜色标志
    int juLiYuZhi;
    int imgwidth;
    int imgheight;
    int liangDu;
    int jianCeBianChang;
    Mat erZhiTu;
    Mat imgG;//绿色通道图像
    Mat imgD;//敌方颜色通道图像
    Mat imgTemplate;
    Mat imgTemplateSmall;
    bool isFar;

};

2.源文件

#include "zhuangjia.hpp"

#ifndef DEBUG
//#define DEBUG
#endif

ZhuangJia::ZhuangJia()
{
    huiDu = 210;
    diColor = RED;
    imgwidth = 640;
    imgheight = 480;
    juLiYuZhi = 15;
    jianCeBianChang = 2;
    isFar = false;

    //读取模板图片
    Mat img = imread("template.bmp");
    vector<Mat> vimg;
    split(img,vimg);
    threshold(vimg[1],imgTemplate,210,255,THRESH_BINARY);
//    imshow("aa",imgTemplate);
}

void ZhuangJia::erZhiHua(const Mat &src, Mat &dst, uchar yz)
{
    vector<Mat> bgr;
    Mat m;
    //亮度调整
    liangDuTiaoZheng(src,m,1,-120);
    split(m, bgr);
    dst.create(src.size(),CV_8UC1);
    imgG = bgr[1];
    imgD = diColor == RED ? bgr[2] : bgr[0];

    //二值化
    uchar *ptrg = imgG.data, *ptrd = imgD.data, *ptrer = dst.data;
    const uchar *ptrend = imgG.data + imgG.rows*imgG.cols;
    for(; ptrg != ptrend; ptrg++,ptrd++,ptrer++)
    {
        *ptrer = (*ptrd - *ptrg) > yz ? 255 : 0;
    }
//    imshow("huidu",dst);
}

void ZhuangJia::liangDuTiaoZheng(const Mat &src, Mat &dst, double k, double b)
{
    liangDu = b;
    dst.create(src.size(),src.typ
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Qt和OpenCV都是常用于图像处理和计算机视觉的开源库。 Qt是一个跨平台的C++框架,提供了丰富的GUI开发工具和库。借助Qt,我们可以很方便地创建图形用户界面并与用户进行交互。它还提供了处理和显示图像的功能,以及与其他库集成的功能。对于图像识别而言,Qt可以用于创建用户友好的界面,显示图像结果,并与其他模块进行通信。 OpenCV是一个用于计算机视觉和机器学习任务的开源库。它提供了大量的函数和算法,用于图像处理、特征提取、对象识别等任务。OpenCV支持多种编程语言,包括C++、Python等。对于图像识别OpenCV可以用于图像预处理、特征提取和匹配、对象检测和分类等步骤。 在使用Qt和OpenCV进行图像识别时,我们可以通过以下步骤进行: 1. 使用Qt创建一个图形用户界面,用于加载图像、显示结果和与用户进行交互。 2. 使用OpenCV加载图像,并进行预处理操作,如图像降噪、灰度化、尺寸调整等。 3. 使用OpenCV提供的函数和算法,进行特征提取和匹配,以识别图像中的对象。这可以包括基于颜色、纹理、形状等方面的特征。 4. 根据识别结果,在Qt界面上显示相应的结果,如识别到的对象的位置、类别等信息。 5. 可以结合其他功能,如机器学习算法,对图像进行进一步处理和分类。 通过使用Qt和OpenCV,我们可以在一个友好的界面下进行图像识别,并实现与用户的交互。同时OpenCV提供了丰富的图像处理功能,帮助我们完成图像识别的各个步骤。 ### 回答2: Qt和OpenCV的结合可以实现图像识别的功能。Qt是一个跨平台的C++应用程序开发框架,而OpenCV是一个用于计算机视觉和图像处理的开源库。 在使用Qt和OpenCV进行图像识别时,首先需要在Qt项目中导入OpenCV库,通过编写代码调用OpenCV的函数来实现图像处理和识别的功能。可以使用OpenCV提供的函数来读取图像文件,对图像进行预处理,如调整大小、灰度化、降噪等。接下来,可以使用OpenCV的图像处理算法来进行特征提取和图像识别。 在Qt中,可以创建一个窗口来显示图像,并通过事件处理机制来进行交互。比如,可以在窗口中加载图像,然后通过按钮或鼠标事件来触发图像识别的动作。可以使用Qt提供的图形界面组件来美化和定制界面,让用户可以直观地操作和观察图像识别结果。 除了基本的图像识别功能,Qt和OpenCV还可以结合其他算法和技术来实现更高级的图像识别应用。比如,可以利用深度学习模型进行图像分类或目标检测,再结合Qt的图形界面来实现一个易于使用的图像识别应用程序。 总之,Qt和OpenCV的结合可以在Qt应用程序中实现图像识别的功能,通过调用OpenCV的函数和算法来进行图像处理和识别,并利用Qt的图形界面组件来实现人机交互。这样可以开发出功能强大、易于使用的图像识别应用程序

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值