GOMfcTemplate在vs2017上的运行并融合Dnn模块
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也没有问题,应该说是得到了比较好的结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了