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也没有问题,应该说是得到了比较好的结果。

附件列表

(E2E_L2)GOMfcTemplate在vs2017上的运行并融合Dnn模块的更多相关文章

  1. log4cxx日志库在Windows+VS2017上的编译使用

    项目中用到了log4cxx,但是Debug版本运行时老是提示找不到Properities::setProperty?怀疑是提供的库有问题,所以尝试源码来重新编译一下.log4cxx官方主页:https ...

  2. iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果

    在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的.在之前的博客中也提到过,团队合作使用Storyb ...

  3. Windows OS上安装运行Apache Kafka教程

    Windows OS上安装运行Apache Kafka教程 下面是分步指南,教你如何在Windows OS上安装运行Apache Zookeeper和Apache Kafka. 简介 本文讲述了如何在 ...

  4. [转].NET程序在windows操作系统上独立运行的技术要点

    发现一个不错的网站,转载一篇文章方便查看 转自 http://www.linuxdot.net/bbsfile-3354   ===================================== ...

  5. PowerShell执行脚本时“系统上禁止运行脚本”问题解决

    PowerShell执行脚本策略错误 错误信息:PowerShell运行脚本错误--"系统上禁止运行脚本" 原因:默认执行策略为Restricted 解决:执行Set-Execut ...

  6. npm run dev 在Linux上持久运行

    关于node.js应用程序如何持久运行,我在node.js服务端程序在Linux上持久运行用过. 这次主要是针对是一个vue.js应用程序. vue.js应用程序通常运行命令是npm run dev. ...

  7. node.js服务端程序在Linux上持久运行

    如果要想在服务端部署node.js程序,让其持久化运行,就不能单单使用npm start命令运行,当然了,这样运行是毫无问题的,但是当关闭xshell窗口或者是关闭进程的时候(其实关闭xshell窗口 ...

  8. springboot打成的jar包如何在Linux上持久运行

    一.首先说说在没有springboot的时候,项目是如何部署的? 1.动态web项目 动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署.当然了,这 ...

  9. kubernetes 每个node上只能运行一个副本DaemonSet

    每个node上只能运行一个副本: apiVersion: extensions/v1beta1 kind: DaemonSet #使用DaemonSet的方式运行 metadata: name: ku ...

随机推荐

  1. Git收藏

     Git Flow 的正确使用姿势 https://www.jianshu.com/p/41910dc6ef29 git合并分支上的commit为一条commit到master  https://ww ...

  2. 分布式调度平台XXL-JOB源码分析-执行器端

    上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...

  3. Kubernetes 基本概念介绍

    什么是Kubernetes? Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成 ...

  4. only_full_group_by

    ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate ...

  5. django 时间格式(全局修改,不用过滤器)

    百度了一圈,很没创意的用过滤器,前端每次显示时间表格都要用过滤器,这种挺烦的.隐约记得以前见过没有用过滤器的.换google https://stackoverflow.com/questions/5 ...

  6. 0.0.Pycharm使用技巧

    调整自动字体大小 Increase(字体变大) Decrease(字体变小) 背景颜色设置 pycharm 左侧菜单问题 解决 pycharm中配置启动Django项目 1.先打开mange.py,然 ...

  7. 015_Python3 迭代器与生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  8. C二维字符数组的使用及如何获取二维数组的总行数和总列数!

    #include <stdio.h> #include <stdlib.h> int main(){ char str[][30] = {"zhangsan" ...

  9. 洛谷 P4058 [Code+#1]木材 题解

    P4058 [Code+#1]木材 题目描述 有 \(n\) 棵树,初始时每棵树的高度为 \(H_i\),第 \(i\) 棵树每月都会长高 \(A_i\)​.现在有个木料长度总量为 $ S$ 的订单, ...

  10. 交互设计算法基础(2) - Selection Sort

    int[] selection_sort(int[] arr) { int i, j, min, temp, len=arr.length; for (i=0; i<len-1; i++) { ...