C++ OpenCV和MFC—imshow在32位和64位上的奇怪行为
我在Microsoft Visual Studio 2010中有一个MFC项目。在我的对话中,我有一个PictureControl。我用opencv生成一个窗口,然后像这样将它转换为我的PictureControlC++ OpenCV和MFC—imshow在32位和64位上的奇怪行为,c++,visual-studio-2010,opencv,mfc,vc10,C++,Visual Studio 2010,Opencv,Mfc,Vc10,我在Microsoft Visual Studio 2010中有一个MFC项目。在我的对话中,我有一个PictureControl。我用opencv生成一个窗口,然后像这样将它转换为我的PictureControl namedWindow("INPUT", 1); HWND hWnd = (HWND) cvGetWindowHandle("INPUT"); HWND hParent = ::GetParent(hWnd); ::SetParent(hWnd, GetDlgItem(IDC_BMP
namedWindow("INPUT", 1);
HWND hWnd = (HWND) cvGetWindowHandle("INPUT");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd, GetDlgItem(IDC_BMP_LOAD)->m_hWnd);
::ShowWindow(hParent, SW_HIDE);
当我为32位体系结构编译它时,它可以工作。当我编译64位时,它生成namedwindow,但不隐藏,在名称处有一个奇怪的字符串,如“%HO”,与“INPUT”不同。当我试图用imshow显示某个内容时,它会给我一个访问冲突错误。这些图像来自网络摄像头。
任何帮助都将不胜感激!
谢谢
更新
我试图查看窗口处理程序hWnd是否正常,在unsued字段,它给出了“CXX0030:错误:无法计算表达式”。在OpenCV的文档中,函数cvGetWindowHandle()表示,在Win32应用程序中,它返回按名称引用的窗口的本机HWND。您必须使用适合编译器的OpenCV库。如果构建64位,则必须使用64位opencv库。此外,您必须在调试生成中使用调试库,在发布生成中使用发布库!调用C实现(
cvNamedWindow
)会返回一个值,表示成功/失败。这至少比C++实现的信息多一些。我不知道你是如何检查窗口名称的;Windows不会以用户可见的方式存储它们。cvGetWindowHandle
是否返回有效的窗口句柄?是您正在查询的那个吗(使用Spy++查找)?我试图查看窗口处理程序hWnd是否正常,在unsued字段中,它给出了“CXX0030:错误:无法计算表达式”。在OpenCV的文档中,函数cvGetWindowHandle()表示,在Win32应用程序中,它返回按名称引用的窗口的本机HWND。您必须使用适合编译器的OpenCV LIB。如果构建64位,则必须使用64位opencv库。此外,您必须在调试生成中使用调试库,在发布生成中使用发布库!调用C实现(cvNamedWindow
)会返回一个值,表示成功/失败。这至少比C++实现的信息多一些。我不知道你是如何检查窗口名称的;Windows不会以用户可见的方式存储它们。cvGetWindowHandle
是否返回有效的窗口句柄?是您正在查询的那个吗(使用Spy++查找)?我试图查看窗口处理程序hWnd是否正常,在unsued字段中,它给出了“CXX0030:错误:无法计算表达式”。在OpenCV的文档中,函数cvGetWindowHandle()表示,在Win32应用程序中,它返回按名称引用的窗口的本机HWND。