博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(E2E_L2)GOMfcTemplate在vs2017上的运行并融合Dnn模块
阅读量:5031 次
发布时间:2019-06-12

本文共 1936 字,大约阅读时间需要 6 分钟。

GOMfcTemplate一直运行在VS2012上运行的,并且开发出来了多个产品。在技术不断发展的过程中,出现了一些新的矛盾:

1、由于需要使用DNN模块,而这个模块到了4.0以上的OpenCV才支持的比较完善,所以需要修改OpenCV版本;
2、4.0以上的OpenCV需要使用c++11,所以VS2012无法使用,故直接跳过VS2013、VS2015,直接使用2017;
3、4.0以上的OpenCV不支持老版本的CV,所以CVVImage中很多东西无法使用。

为了解决系列问题,进行研究。并且将研究结果记录下来:
一、解决模块冲突问题
1、在将GOMfcTemplate改成64位的过程中,一个常见的问题为头文件支持错误,比如“
出现error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面) ”或者“
出现error C2061 : 语法错误: 标识符“LPDIRECT3D2”等之类的
经过修改后的头文件应该是这样的:
508489-20190610215212689-89398390.png
应该能够解决绝大多问题;
二、升级过程中的版本问题
在设置的时候,注意
508489-20190610215213326-1122981577.png
以及
508489-20190610215213907-2004882528.png
三、版本统一,全部使用PreBuild版本
508489-20190610215214767-436203667.jpg
508489-20190610215215040-1654260086.png
508489-20190610215215275-1198938781.png
但是在使用过程中,可能会报这样的错误
508489-20190610215215918-876904151.png
需要添加设置
在Lib的附加依赖项
508489-20190610215216199-721660344.png
并且添加这两个.lib
508489-20190610215216510-648165151.png
四、代码融合问题
为了得到这样的结果,在几个地方需要做出修改:
508489-20190610215217010-1761477743.jpg
在OnInitDialog中
508489-20190610215217362-586446956.png
在主要处理的线程中
508489-20190610215217633-2116506566.png
将代码继续维护,丰富“采用算法”按钮。
508489-20190610215217988-1000481488.png
五、丢掉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也没有问题,应该说是得到了比较好的结果。

附件列表

 

转载于:https://www.cnblogs.com/jsxyhelu/p/11000551.html

你可能感兴趣的文章
D - Flip tile
查看>>
Java连接RabbitMQ之创建连接
查看>>
开户vim编程之--cscope支持
查看>>
python数据类型图解
查看>>
js获取标准北京时间
查看>>
DZ!NT论坛 3.6.711删除用户各种错解决方案
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>