OpenCV学习环境搭建

869 阅读2分钟

下载OpenCV

这里以OpenCV – 2.4.13.6为例, 这里的2.4.13.6其实应该是2.4.13.7(2.x版本的最新版), 因为官网里有两个2.4.13.6版本, 一个是18年发布的, 一个是19年发布的.

image.png

image.png

大概是官方搞错了.

Windows平台为例

image.png

OpenCV Windows 版下载地址

OpenCV 2.4.13.6 文档

安装并配置环境变量

安装

(略)

C:\tools\opencv

配置环境变量

必须要配, 否则你就要将编译好的exe丢到对应bin目录下才能运行

image.png

我这里的配的是 C:\tools\opencv\build\x64\vc14\bin image.png

配置开发环境

Visual Studio 2019

新建项目

image.png

配置项目属性

image.png

image.png

亲测在 VS2022 中不需要这一步(配置*d.lib文件名列表), 但在之前版本(VS2019)会报错, 提示找不到链接符号.

*d.lib中的 d 是指 debug, 如果把全部的(*.lib)文件全部列上去了, 可能会导致奇怪的问题, 比如显示图片, 会报错, 和找不到图片报的一样错, 就是因为程序使用了release的库.

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;

int main()
{
	Mat image = imread("D:/2222.jpg", CV_LOAD_IMAGE_COLOR);	

	// 创建显示图文件窗口
	namedWindow("Display window", CV_WINDOW_NORMAL);
	// 在窗口内显示图文件
	imshow("Display window", image);

	// 窗口等待按键
	waitKey(0);

	return 0;
}

CLion

CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(OpenCV)

set(CMAKE_CXX_STANDARD 14)

# 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")

add_executable(
        OpenCV
        main.cpp
)

include_directories(OpenCV C:\tools\opencv\build\include)

target_link_libraries(OpenCV C:\tools\opencv\build\x64\vc14\lib\*d.lib)

main.cpp

#include <opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;

#define w 400

int main(int argc, char** argv)
{
    Mat image = Mat::zeros(w, w, CV_8UC3);

    // 绘制矩形
    rectangle(image, Point(w / 4, w / 4), Point(3 * w / 4, w / 4 * 3), Scalar(0, 0, 255), 3, 4);

    // 绘制圆形
    circle(image, Point(w / 2, w / 2), w / 4, Scalar(0, 255, 0), 3, CV_AA);

    // 绘制椭圆
    ellipse(image, Point(w / 2, w / 2), Size(w / 4, w / 8 * 3), 0, 0, 360, Scalar(255, 0, 0), 3);
    ellipse(image, Point(w / 2, w / 2), Size(w / 4, w / 8 * 3), 45, 0, 360, Scalar(255, 0, 0), 3);
    ellipse(image, Point(w / 2, w / 2), Size(w / 4, w / 8 * 3), 90, 0, 360, Scalar(255, 0, 0), 3);
    ellipse(image, Point(w / 2, w / 2), Size(w / 4, w / 8 * 3), 135, 0, 360, Scalar(255, 0, 0), 3);

    // 绘制直线
    Point point_left_up = Point(w / 8, w / 8);
    Point point_left_bottom = Point(w / 8, w / 8 * 7);
    Point point_right_up = Point(w / 8 * 7, w / 8);
    Point point_right_bottom = Point(w / 8 * 7, w / 8 * 7);
    Scalar line_color = Scalar(100, 255, 89);
    int thickness = 3;

    line(image, point_left_up, point_left_bottom, line_color, thickness);
    line(image, point_right_up, point_right_bottom, line_color, thickness);
    line(image, point_left_bottom, point_right_bottom, line_color, thickness);
    line(image, point_right_up, point_left_up, line_color, thickness);

    line(image, point_left_up, point_right_bottom, line_color, thickness);
    line(image, point_left_bottom, point_right_up, line_color, thickness);

    // 用线画点
    line(image, Point(w / 2, w / 2), Point(w / 2, w / 2), line_color, 40);

    // 用圆画点
    //circle(image, Point(w / 2, w / 2), 50, Scalar(100, 200, 255), -1);
    circle(image, Point(w / 2, w / 2), 50, line_color, -1);

    namedWindow("image", CV_WINDOW_AUTOSIZE);
    imshow("image", image);

    // 窗口等待按键
    waitKey(0);

    return 0;
}