OpenCV 4.10 + Visual Studio 环境配置:属性页手动配法

在 Visual Studio 项目里用属性页手动配置 OpenCV 4.10 的完整步骤:包含目录、库目录、链接器输入、环境变量,四步配好后用一段自检代码验证。(如果用 CMake 工程,则改为环境变量 + find_package 的方案,不用逐项目配属性页。) 一、配置步骤 1. 包含目录 项目属性 → VC++ 目录 → 包含目录,添加: <OpenCV安装目录>\build\include 2. 库目录 项目属性 → VC++ 目录 → 库目录,添加: <OpenCV安装目录>\build\x64\vc16\lib vc16 对应 Visual Studio 2019/2022 3. 链接器输入 项目属性 → 链接器 → 输入 → 附加依赖项,添加: opencv_world4100.lib 4. 环境变量 系统环境变量 Path 中添加: <OpenCV安装目录>\build\x64\vc16\bin 二、验证 #include <opencv2/opencv.hpp> #include <iostream> int main() { std::cout << "OpenCV Version: " << CV_VERSION << std::endl; return 0; } 三、常见问题 运行时弹出找不到 dll → 检查环境变量是否配置正确 链接错误 → 检查库目录和附加依赖项 Release / Debug 库混用 → Debug 构建须链接带 d 后缀的 opencv_world4100d.lib,Release 用 opencv_world4100.lib

2026 年 10 月 13 日

OpenCV 常用 API:图像读写、显示与颜色空间转换

OpenCV 入门最常用的几组 API:图像读取、显示、颜色空间转换、保存、获取图像信息。 一、图像读取与显示 #include <opencv2/opencv.hpp> using namespace cv; int main() { // 读取图像 Mat img = imread("test.jpg"); // 显示图像 imshow("窗口名", img); // 等待按键 waitKey(0); return 0; } 二、灰度图转换 Mat gray; cvtColor(img, gray, COLOR_BGR2GRAY); imshow("灰度图", gray); 三、HSV 图像转换 Mat hsv; cvtColor(img, hsv, COLOR_BGR2HSV); imshow("HSV", hsv); 四、常用颜色空间 转换 常量 BGR → 灰度 COLOR_BGR2GRAY BGR → HSV COLOR_BGR2HSV BGR → RGB COLOR_BGR2RGB 灰度 → BGR COLOR_GRAY2BGR 五、图像保存 imwrite("output.jpg", gray); 六、获取图像信息 int width = img.cols; // 宽度 int height = img.rows; // 高度 int channels = img.channels(); // 通道数

2026 年 10 月 13 日

OpenCV 像素遍历:at<> 与 ptr<> 两种方式对比

OpenCV 访问像素的两种方式:at<> 直接访问和 ptr<> 指针访问。 一、方式一:at<> 直接访问 通过行列索引直接访问像素,代码简洁但每次访问都有边界检查开销。 // 单通道(灰度图) uchar pixel = image.at<uchar>(i, j); image.at<uchar>(i, j) = 255 - pixel; // 三通道(彩色图) Vec3b pixel = image.at<Vec3b>(i, j); pixel[0] = 255 - pixel[0]; // B pixel[1] = 255 - pixel[1]; // G pixel[2] = 255 - pixel[2]; // R image.at<Vec3b>(i, j) = pixel; 二、方式二:ptr<> 指针访问 获取行首指针后直接偏移,性能更优(无边界检查)。 // 单通道 uchar* rowPtr = image.ptr<uchar>(i); rowPtr[j] = 255 - rowPtr[j]; // 三通道 Vec3b* rowPtr = image.ptr<Vec3b>(i); Vec3b pixel = rowPtr[j]; pixel[0] = 255 - pixel[0]; pixel[1] = 255 - pixel[1]; pixel[2] = 255 - pixel[2]; rowPtr[j] = pixel; 三、对比 特性 at<> ptr<> 语法 简洁直观 需理解指针 性能 每次边界检查,较慢 无边界检查,较快 适用 小批量访问、调试 大图遍历、性能敏感 四、反转图像示例(完整) void invertImage(Mat& image) { int w = image.cols; int h = image.rows; int channels = image.channels(); for (int i = 0; i < h; i++) { uchar* rowPtr = image.ptr<uchar>(i); for (int j = 0; j < w * channels; j++) { rowPtr[j] = 255 - rowPtr[j]; } } imshow("Inverted", image); } 可用 rowPtr[j] = 255 - rowPtr[j] 一次处理所有通道,无需区分通道数。

2026 年 10 月 13 日