Windows系统下OpenCV开发环境配置

OpenCV开发环境(Windows系统)

VisualStudio2022 配置 OpenCV4.8.0 示例

VC++目录 -> 包含目录 -> E:\VariousTools\opencv\build\include
VC++目录 -> 库目录 -> E:\VariousTools\opencv\build\x64\vc16\lib
链接器 -> 输入 -> 附加依赖项 -> opencv_world480.lib(Release|x64) or opencv_world480d.lib(Debug|x64)

CMkae 配置 OpenCV4.5.5(mingw) 示例(Windows11系统)

# CMakeLists.txt文件

cmake_minimum_required(VERSION 3.10)

project(opencv_demo)

set(OpenCV_DIR E:/VariousTools/OpenCV-MinGW-Build-OpenCV-4.5.5-x64/x64/mingw/lib)

# 查找OpenCV库
find_package(OpenCV REQUIRED)
if (OpenCV_FOUND)
    message(STATUS "OpenCV library status:")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
else()
    message(FATAL_ERROR "Could not find OpenCV library")
endif()

# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})

# 指定动态链接库位置
link_directories(${OpenCV_LIBS})

add_executable(demo1 src/demo1.cpp)

# 链接OpenCV库
target_link_libraries(demo1 PRIVATE ${OpenCV_LIBS})

注:set(OpenCV_DIR E:/VariousTools/opencv/build/x64/vc16/lib)时输出可以正常找到OpenCV4.8.0和相关依赖库,但在cmake构建时会报错:undefined reference to `cv::imread … 等,推测可能原因是该路径与VisualStudio的编辑器(msvc)是对应的,而CMake构建项目时用的是cmake -G “MinGW Makefiles” -B build -> cmake --build build,即mingw开发工具,因此需要对应mingw版本的opencv,可自行编译,亦可在github上获取。若可执行程序成功生成但无法定位程序输入点于…dll文件中,则调整环境变量中mingw的位置即可。

Qt的qmake 配置 OpenCV4.5.5(mingw) 示例

INCLUDEPATH += E:\VariousTools\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\include

LIBS += E:\VariousTools\OpenCV-MinGW-Build-OpenCV-4.5.5-x64\x64\mingw\bin\libopencv_*.dll

OpenCV示例程序

// camera.cpp
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	// 视频采集对象
	VideoCapture cap;
	// 设置分辨率
	int width = 640;
	int height = 480;

	// 设置摄像头的宽和高
	cap.set(CAP_PROP_FRAME_WIDTH, width);
	cap.set(CAP_PROP_FRAME_HEIGHT, height);

	// 打开摄像头
	cap.open(0);
	if (!cap.isOpened())
	{
		cout << "无法打开摄像头..." << endl;
			return 1;
	}

	// Mat类型的frame读取返回的帧
	Mat frame;

	// 写入.mp4文件,参数依次为:文件名,编码格式,帧率,帧大小
	// VideoWriter writer("./output/record.mp4", VideoWriter::fourcc('H', '2', '6', '4'), 20, Size(width, height));

	// 循环读取视频帧
	while (true)
	{
		// 读取视频帧 -> read()函数
		cap.read(frame);

		flip(frame, frame, 1);

		// 显示视频帧
		cv::imshow("opencv_demo", frame);

		// 写入视频
		// writer.write(frame);
		
		// 等待按键,延时30ms,否则视频播放太快
		int k = waitKey(30);
		if (k == 27)
		{
			cout << "退出..." << endl;
			break;
		}
	}

	return 0;
}
// imgAction.cpp
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;

int main(int argc, char** argv)
{
	// 读取图像
	cv::Mat img = cv::imread("./media/sea.jpg");
	cv::Mat img_resize;
	// 调整size -> 输入图像、输出图像、输出图像大小
	cv::resize(img, img_resize, cv::Size(320, 240));

	cv::Mat img_copy;
	// 拷贝图像
	img_resize.copyTo(img_copy);

	cv::Rect rect(100, 100, 200, 100); // x, y, width, height
	// 裁剪图像
	cv::Mat img_roi = img(rect);
	cv::imwrite("./output/img_roi.jpg", img_roi);

	// 水平拼接图像 -> 保证两张图片高度(rows)一致
	cv::Mat img_hcon;
	cv::hconcat(img_resize, img_copy, img_hcon);
	cv::imwrite("./output/img_hcon.jpg", img_hcon);

	// 垂直拼接图像 -> 保证两张图片宽度(cols)一致
	cv::Mat img_vcon;
	cv::vconcat(img_resize, img_copy, img_vcon);
	cv::imwrite("./output/img_vcon.jpg", img_vcon);

	// 翻转图片
	cv::Mat flip;
	cv::flip(img_resize, flip, 1); // 1 -> 水平翻转;0 -> 竖直翻转;-1 -> 水平垂直翻转
	cv::imwrite("./output/img_flip.jpg", flip);

	// 旋转图片
	cv::Mat rotate;
	cv::rotate(img_resize, rotate, cv::ROTATE_90_CLOCKWISE); // 顺时针旋转90度
	cv::imwrite("./output/img_rotate.jpg", rotate);

	return 0;
}
// readImg.cpp
#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;

int main(int argc, char** argv)
{
    // 读取图片,返回 -> Mat格式
    cv::Mat img = cv::imread("./media/montains.jpg");
    // 判断是否读取成功
    if (img.empty())
    {
        cout << "Could not read the image." << endl;
        return 1;
    }

    // 打印图片的高度和宽度信息
    cout << "height: " << img.rows << ", " << "width: " << img.cols << endl;

    // 打印图片data
    // cout << "data: " << cv::format(img, cv::Formatter::FMT_NUMPY) << endl; // numpy格式
    // cout << "data: " << cv::format(img, cv::Formatter::FMT_PYTHON) << endl; // list格式

    // 创建灰度图
    cv::Mat gray;

    // 灰度转换
    cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY),

    // 保存图片
    cv::imwrite("./output/gray.jpg", gray);

    // 显示图片
    cv::imshow("灰度化的图片", gray);

    // 等待按键
    cv::waitKey(0);

	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值