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”等之类的”经过修改后的头文件应该是这样的:

应该能够解决绝大多问题;

二、升级过程中的版本问题

在设置的时候,注意
以及

三、版本统一,全部使用PreBuild版本


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

四、代码融合问题
为了得到这样的结果,在几个地方需要做出修改:


在OnInitDialog中

在主要处理的线程中

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

五、丢掉CVVImage

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

void CGOMfcTemplate2Dlg::showImage(Mat src, UINT ID)
{
    if (src.empty())
        return;
    CRect rect;
    GetDlgItem(ID) ->GetClientRect( &rect );    // 在哪里进行显示?
    CDC* pDC = GetDlgItem( ID ) ->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.cols, src.rows), CV_8UC3, m_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.rows, m_bitmapBits,&bmi, DIB_RGB_COLORS, SRCCOPY);//显示在街面上
    ReleaseDC( pDC );

}


这里使用的是对话框模式,如果在Model/View模式中使用,可以结合Paint/Draw等,将模式更好地使用。

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

附件列表

最新文章

  1. Atitit opencv版本新特性attilax总结
  2. eAccelerator、memcached、xcache、APC 等四个加速扩展的区别
  3. flex中通过代码获取supermap的token
  4. go outside @ CULTS LYRICS
  5. P1032 字串变换
  6. PBOC2.0与PBOC3.0的区别
  7. MongoDB基本操作
  8. 关于Memcache使用的工具类
  9. first blog编程之美-----计算1的个数
  10. 使用PHP-Barcode轻松生成条形码(一)
  11. jQuery第五章
  12. 无法访问 ASP 兼容性模式
  13. 系统级性能分析工具perf的介绍与使用[转]
  14. Centos 05 系统目录讲解
  15. RobotFramework + Appium 移动自动化实现
  16. 在启用属性的情况下启动 Confluence 6
  17. 使用openssl创建一个自签名https证书,并配置到nginx里面
  18. Git和代码规范
  19. 按行读取.txt文件,并按行写入到新文件中
  20. linux系统上项目部署

热门文章

  1. QT生成的exe在其他电脑打开
  2. JAVA 的8种基本数据类型
  3. 关于MQ的几件小事:消息队列的用途、优缺点、技术选型
  4. 浅谈CopyOnWriteArraySet
  5. 使用VISIO绘制组织结构图的操作方法
  6. PHP——封装Curl请求方法支持POST | DELETE | GET | PUT 等
  7. tcp的三次握手和四次挥手转自https://www.jianshu.com/p/d3725391af59
  8. 2019/2/18 Test
  9. Codeforces Round #604 (Div. 2) A,B,C【D题待补】
  10. CF1097D 【Makoto and a Blackboard】