常州市做网站的公司,中小学生做的网站,php 做视频网站,中国外贸网站大全一、准备软件
OpenCV源码CMake工具MinGW工具链#xff08;需要选用 posix 线程版本#xff1a;原因见此#xff09;
二、操作步骤
官网提供了VC16构建版本的二进制包#xff0c;但是没有给出GCC编译的版本。所以如果使用MinGW进行构建#xff0c;那就只能从源码开始构建…一、准备软件
OpenCV源码CMake工具MinGW工具链需要选用 posix 线程版本原因见此
二、操作步骤
官网提供了VC16构建版本的二进制包但是没有给出GCC编译的版本。所以如果使用MinGW进行构建那就只能从源码开始构建了。
但是如果你愿意用MSVC的话那就可以跳过编译的步骤当然也可以不跳过直接使用二进制文件进行后面的软件设计 #mermaid-svg-CSWmayIRrmPWWffU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CSWmayIRrmPWWffU .error-icon{fill:#552222;}#mermaid-svg-CSWmayIRrmPWWffU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CSWmayIRrmPWWffU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-CSWmayIRrmPWWffU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CSWmayIRrmPWWffU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CSWmayIRrmPWWffU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CSWmayIRrmPWWffU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CSWmayIRrmPWWffU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CSWmayIRrmPWWffU .marker.cross{stroke:#333333;}#mermaid-svg-CSWmayIRrmPWWffU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CSWmayIRrmPWWffU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CSWmayIRrmPWWffU .cluster-label text{fill:#333;}#mermaid-svg-CSWmayIRrmPWWffU .cluster-label span{color:#333;}#mermaid-svg-CSWmayIRrmPWWffU .label text,#mermaid-svg-CSWmayIRrmPWWffU span{fill:#333;color:#333;}#mermaid-svg-CSWmayIRrmPWWffU .node rect,#mermaid-svg-CSWmayIRrmPWWffU .node circle,#mermaid-svg-CSWmayIRrmPWWffU .node ellipse,#mermaid-svg-CSWmayIRrmPWWffU .node polygon,#mermaid-svg-CSWmayIRrmPWWffU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CSWmayIRrmPWWffU .node .label{text-align:center;}#mermaid-svg-CSWmayIRrmPWWffU .node.clickable{cursor:pointer;}#mermaid-svg-CSWmayIRrmPWWffU .arrowheadPath{fill:#333333;}#mermaid-svg-CSWmayIRrmPWWffU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CSWmayIRrmPWWffU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CSWmayIRrmPWWffU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-CSWmayIRrmPWWffU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-CSWmayIRrmPWWffU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CSWmayIRrmPWWffU .cluster text{fill:#333;}#mermaid-svg-CSWmayIRrmPWWffU .cluster span{color:#333;}#mermaid-svg-CSWmayIRrmPWWffU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CSWmayIRrmPWWffU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} OpenCV源码 CMake mingw32-make 头文件 .a .dll 发布版 源程序 gcc exe 运行结果 2.1 使用cmake
打开 cmake-gui.exe。
选择目录、选择编译器。通常应该能自动选上MinGW如果没有选上的话可能MinGW路径没有加入环境变量 输入 world打开 BUILD_opencv_world 的开关这控制着将所有有关OpenCV的函数全部输出到一个文件中。
如果你不需要这一点也可以不选。
中途可能报错但是没有关系OpenCV的主要函数功能应该都是可以编译通过的 2.2 使用mingw
在build目录下打开cmd运行下面两行。其中 -j8 表示启用8线程并行编译也可以不加
mingw32-make -j8
mingw32-make install第一条命令会运行很长很长时间。
第二条命令会创建一个名为 install 的文件夹目录结构大概是这个样子 这个文件夹路径要记住后面要用。
2.3 编写OpenCV程序
写一段计算两个旋转矩形的IoU的算法其中 rotatedRectIOU 函数来自于 ~\opencv\modules\dnn\src\nms.cpp 文件。
但是由于原本的这个函数是 inline 的所以无法直接调用。
我这里直接复制过来了
/* main.cpp */#include opencv2/opencv.hppusing namespace cv;float rotatedRectIOU(const RotatedRect a, const RotatedRect b) {std::vectorPoint2f inter;int res rotatedRectangleIntersection(a, b, inter);if (inter.empty() || res INTERSECT_NONE)return 0.0f;if (res INTERSECT_FULL)return 1.0f;float interArea contourArea(inter);return interArea / (a.size.area() b.size.area() - interArea);
}int main() {auto rect1 RotatedRect(Point2f(2, 2), Size2f(3, 4), 45);auto rect2 RotatedRect(Point2f(2, 2), Size2f(4, 3), 30);auto iou rotatedRectIOU(rect1, rect2);std::cout IoU: iou std::endl;return 0;
}测试输入的两个旋转矩形画出来是这么个效果 我拿尺子测量了一下矩形面积12平方 平行四边形面积9.3平方。
按照定义IoU应大致为 I o U 9.3 / ( 12 12 − 9.3 ) 0.633 IoU 9.3 / (12 12 - 9.3) 0.633 IoU9.3/(1212−9.3)0.633
拿程序验证一下编写 dist.bat 文件其中 ^ 是转义的意思可以方便将多行代码写到一行内
echo offset installINSTALL_FOLDERg main.cpp -o main.exe ^-I %install%/include ^-L %install%/x64/mingw/lib ^-l opencv_world490其中 -I 控制的是头文件目录-L 控制的是库文件目录-l 是具体要链接的库文件的名字去掉开头的 lib 和后面的 .dll.a 后缀。
INSTALL_FOLDER这里填写前面 mingw32-make install 命令生成出来的文件夹路径。如果操作步骤都和我一致的话路径应该是 ~/opencv/build/install。
mingw这里使用MinGW编译所以文件夹是在 mingw 路径。如果使用MSVC编译文件夹路径应该类似于是 vc16。
world前面勾选了 BUILD_opencv_world 开关所以这里会是 opencv_world 这个库文件名。如果你前面没有勾选则你在程序中引用了哪个库文件的函数则需要加上哪个库的名字。
490我这里使用的是 4.9.0 的版本所以数字编号是 490。如果版本不同需要根据实际情况修改。
2.4 运行程序
运行程序需要将 ~\install\x64\mingw\bin 目录下的 libopencv_world490.dll 文件拷贝到运行程序的同级目录下。
最后运行 main.exe 返回结果为
IoU: 0.634597和绘图计算结果验证正确。