(E2E_L2)GOMfcTemplate在vs2017上的运行并融合Dnn模块


GOMfcTemplate一直运行在VS2012上运行的,而且开发出来了多个产品。在技术不断发展的过程当中,出现了一些新的矛盾:
一、因为须要使用DNN模块,而这个模块到了4.0以上的OpenCV才支持的比较完善,因此须要修改OpenCV版本;
二、4.0以上的OpenCV须要使用c++11,因此VS2012没法使用,故直接跳过VS201三、VS2015,直接使用2017;
三、4.0以上的OpenCV不支持老版本的CV,因此CVVImage中不少东西没法使用。
c++

为了解决系列问题,进行研究。而且将研究结果记录下来:

1、解决模块冲突问题
一、在将GOMfcTemplate改为64位的过程当中,一个常见的问题为头文件支持错误,好比“ 出现error C2146: 语法错误: 缺乏“;”(在标识符“PVOID64”的前面) ”或者“ 出现error C2061 : 语法错误: 标识符“LPDIRECT3D2”等之类的 通过修改后的头文件应该是这样的:

应该可以解决绝大多问题;

2、升级过程当中的版本问题

在设置的时候,注意
以及

3、版本统一,所有使用PreBuild版本


可是在使用过程当中,可能会报这样的错误
须要添加设置
在Lib的附加依赖项
而且添加这两个.lib

4、代码融合问题
为了获得这样的结果,在几个地方须要作出修改:


在OnInitDialog中

在主要处理的线程中

将代码继续维护,丰富“采用算法”按钮。

5、丢掉CVVImage

CVVImage中须要CV库的引入,但在新版本的代码中,cv.h都找不到了。为了完全地解决这个问题,直接从新了showimage函数,将CVVImage中有用的部分引入进来。
获得的结果可以使用,可是可能存在一些因为不是很完备而形成的问题,特别是输入函数的图像必定要是cv_8u RGB的,可能还会存在其余问题,须要在使用过程当中特别注意:

void CGOMfcTemplate2Dlg::showImage(Mat srcUINT ID)
{
    if (src.empty())
        return;
    CRect rect;
    GetDlgItem(ID) ->GetClientRect( &rect );    // 在哪里进行显示?
    CDCpDC = GetDlgItemID ) ->GetDC();   
    HDC hDC = pDC ->GetSafeHdc();                // 获取显示控件(位置)的 HDC(设备句柄)
    
    BITMAPINFO bmi = { 0 };                     //生成bitmap
    bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
    bmi.bmiHeader.biCompression = BI_RGB;
    bmi.bmiHeader.biWidth = src.cols;
    bmi.bmiHeader.biHeight = src.rows * -1;
    bmi.bmiHeader.biPlanes = 1;
    bmi.bmiHeader.biBitCount = 24;
    m_bitmapBits = new RGBTRIPLE[src.cols * src.rows];
    Mat cv_bitmapBits(Size(src.colssrc.rows), CV_8UC3m_bitmapBits);
    src.copyTo(cv_bitmapBits);                      //拷贝到内存中
    
    if (rect.Width() > src.cols)
    {
        SetStretchBltMode(
            hDC,           // handle to device context
            HALFTONE);
    }
    else
    {
        SetStretchBltMode(
            hDC// handle to device context
            COLORONCOLOR);
    }
    ::StretchDIBits(hDC, 0, 0, rect.Width(), rect.Height(), 0, 0, src.cols,src.rowsm_bitmapBits,&bmiDIB_RGB_COLORSSRCCOPY);//显示在街面上
    ReleaseDCpDC );
}

这里使用的是对话框模式,若是在Model/View模式中使用,能够结合Paint/Draw等,将模式更好地使用。

目前在64位、PreBuild下都是能够运行的,Dshow也没有问题,应该说是获得了比较好的结果。




附件列表

相关文章
相关标签/搜索