opencv - 为什么安装 opencv 并不容易,正如您在教程中看到的那样?

标签 opencv mingw codeblocks

安装一些像opencv这样的库在这个级别上是非常不公平的游戏:(但是当你看youtube时看起来很容易:))

错误 1:strcpy_s 和 strcat_s 未在此命名空间中声明。要解决它,请分别使用函数 strncpy 和 strncat。后者的格式与前一种不同。
strncpy(szKey, icvWindowPosRootKey, 1024);
strncat(szKey, 名称, 1024);

错误 2:在此范围内找不到时间。

错误 3:modules\videoio\CMakeFiles\opencv_videoio.dir\build.make:146:目标“modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_dshow.cpp.obj”的配方失败

错误 4:目标 'modules/videoio/CMakeFiles/opencv_videoio.dir/all' 的配方失败
mingw32-make[1]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/all

错误 5:目标“全部”的配方失败

错误 6:“M_PI”未在此范围内声明

错误 7:“posix_memalign”未在此范围内声明

错误 8:“D3D11_TEXTURE2D_DESC”未在此范围内声明

错误 9:opencv 'nullptr' 未在此范围内声明

错误 10:命名空间“std”中的“mutex”未命名类型

错误 11:在 '>' 标记之前的预期不合格 ID

错误 12:limpc-3.dll 未找到 opencv

错误 13:目标 pch_Generate_opencv_core.dir/all' 的配方失败

错误 14:'modules/core/precomp.hpp.gch/opencv_core_Release.gch' opencv 4 失败

最佳答案

如果对 opencv 有一些问题并测试 mingw cmake 和 codeblock 的不同版本,请放松这两个教程:

https://blog.faltutech.com/2018/c-plus-plus-c/09/03/compile-and-integrate-opencv-3-4-1-into-codeblocks-17-12-with-gcc-5-1-0/#

https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/

第二个教程更重要(blog.huihut.com)

:::::
(这是第一个教程)
所需工具:

OpenCv 3.4.1 Windows自解压存档下载
CodeBlocks 17.12 没有 Mingw 下载
Cmake 3.12 .msi 下载
TDM-GCC-64 (tdm64-gcc-5.1.0-2.exe) 下载//我使用这个版本:x86_64-5.3.0-release-posix-seh-rt_v4-rev0
常识下载🙂
脚步:

安装并打开 Cmake
下载并解压目录c:\Opencv中的Opencv(exe是一种包,打开opencv.exe时会询问路径)
在 C:\opencv 中创建新目录“opencv_codeblocks”
在目录 C:\TDM-GCC-64 中下载并安装 TDM-GCC-64,并将路径“C:\TDM-GCC-64\bin”添加到环境变量中。观看下面的视频,了解如何添加环境变量的路径。

打开 CMake。
在Option Where is source code中选择路径“C:/Opencv/opencv/sources”
在构建二进制文件的选项中选择路径“C:/Opencv/Opencv_codeblocks”。这些是我们之前创建的同一个文件夹。
单击构建。
现在您将在类似结构的表格中看到一些选项。很少有人会被检查,也很少有人不会。所以请确保这四个:
预编译 _HEADERS : 未检查
MFMS:未选中
IPP:未选中
构建的 Opencv 世界:选中
再次单击构建,然后单击生成。
现在在目录 Opencv_codeblocks 中将创建一个扩展名为 cbp 的代码块项目文件。双击它。
在构建之前,我们必须配置代码块。
转到设置->编译器
从下拉列表中选择 GNU GCC 编译器
选择选项工具链可执行文件
在选项编译器的安装目录中选择路径“C:\TDM-GCC-64”,即GCC编译器的安装路径。
单击自动检测。并在弹出窗口中单击确定。
转到选项卡编译器标志并选择选项“让 g++ 遵循 C++11 ISO C++ 语言标准 [-std=c++11]”
点击确定
现在从菜单栏中的构建选项单击构建。或 参见以下符号。

在构建时将显示很少的错误:
错误 1:strcpy_s 和 strcat_s 未在此命名空间中声明。要解决它,请分别使用函数 strncpy 和 strncat。后者的格式与前一种不同。
strncpy(szKey, icvWindowPosRootKey, 1024);
strncat(szKey, 名称, 1024);
Error1 将显示 4 或 5 次。因此,将功能更改为等价物。每次使用 Ctrl+s 保存更改并在每次更改文件时单击构建。
错误 2:在此范围内未找到时间。所以解决它,将头文件 time.h (#include ) 添加到显示错误的文件顶部。保存并再次单击构建。
转到:构建->选择目标并选择“安装”选项。
再次单击构建选项。上述过程需要一些时间。在成功构建上继续执行以下步骤。否则,如果可以,请尝试删除它们。
做一些复制:
将 opencv 和 opencv2 文件夹从“C:\opencv\build_codeblocks\install\include”复制到“C:\TDM-GCC-64\x86_64-w64-mingw32\include”
从“C:\opencv\build_codeblocks\install\x64\mingw\lib”复制 libopencv_world343.dll.a(编号 343 可以随着 Opencv 的新版本而改变)到“C:\TDM-GCC-64\x86_64-w64-mingw32\lib”
将所有内容从“C:\opencv\build_codeblocks\install\x64\mingw\bin”复制到“C:\TDM-GCC-64\bin”
现在在代码块中创建一个新项目并编写包含所需头文件的代码(阅读 OpenCV 文档)。示例代码:

#include <opencv2/core/core.hpp> //additional space in header address could cause "not found" problems 
#include <opencv2/highgui.hpp > 
#include <iostream>
using namespace cv;
using namespace std;
int main() {

    Mat image1, image2;
    image1 = imread("cross.png", CV_LOAD_IMAGE_COLOR);
    if (!image1.data) {
        cout << "could not find image1" << endl;
    }
    image2 = imread("cross.png", CV_LOAD_IMAGE_GRAYSCALE);
    if (!image2.data) {
        cout << "could not find image2" << endl;
    }
    cout << "opencv test" << endl;
    namedWindow("Color Image", WINDOW_AUTOSIZE);
    imshow("Color Image", image1);
    namedWindow("Gray Scale Image", WINDOW_AUTOSIZE);
    imshow("GRAY Scale Image", image2);
    waitKey(0);
    destroyAllWindows();
    return 0;
}

在构建之前,右键单击左侧 Pane 中的项目并选择构建选项。
转到链接器设置并单击添加。
在输入框中输入“opencv_world343”,点击确定。请注意,343 可以如上所述更改。所以 343 应该和你上面复制的文件一样。
现在你可以构建和运行代码了。//你也可以像我一样在搜索目录中添加opencv lib和include文件夹

关于opencv - 为什么安装 opencv 并不容易,正如您在教程中看到的那样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57536595/

相关文章:

c++ - 视频处理指南

c++ - 使用opencv从图像中检测三角形和矩形

windows - Windows 上使用 MinGW-w64 编译 ICU 的问题

c++ - 在 const 函数中检查成员 std::array 的边界问题

c++ - 在派生类中初始化基于 C 的 API 提供的基于 C 的 typedef 结构?

c - 使用 macOS High Sierra 时在 C 中使用 while(free) 而不是 while(true)

c - 修改 Code::Blocks 中的代码完成设置

java - 使用 OpenCV 的 Android 光学字符识别

c++ - OpenCV 超正方体

codeblocks - 代码::blocks不会保存工作区项目结构