赞
踩
今日基础示例开始之前,先聊两个问题:
大家都知道,通过 OpenCV imread
函数读取图片得到的数组是 BGR
格式的,而我们日常生活中使用最多的却是 RGB
。不太合理,其实这里面隐藏着一个历史原因:
OpenCV在 1999 年由 Intel 建立,当时主流的摄像头制造商和软件供应商提供的摄像头采集的图像的通道排列顺序为 BGR ,另外对于图片,位图 BMP 是最简单的,也是 Windows 显示图片的基本格式,其文件扩展名为 *.BMP。在 Windows 下,任何格式的图片文件(包括视频播放)都要转化为位图才能显示出来,各种格式的图片文件也都是在位图格式的基础上采用不同的压缩算法生成的,值得注意的是位图 BMP 的格式就是 BGR 。正是基于 BGR 在当时被广泛使用,于是早期 OpenCV 开发者就选择 BGR 颜色格式,这也就成为了一种规范一直用到现在。
【引用自:https://mp.weixin.qq.com/s/Er3Poj8oxV5OKNlAlZwq_A】
Image Watch 是 VS 上一个强大的辅助工具,用过都说好。那么,针对使用 CLion 开发的小伙伴,有没有类似的辅助工具呢?
有,但是不全有。
OpenCV Image Viewer 是 CLion 上的一款 IDEA 插件,在调试模式下显示 numpy 数组 (Python) 或 cv::Mat (C++)。目前仅支持 GRAY、BGR 和 BGRA 图像。在 Python 中,图像必须是 HWC 格式。在 C++ 中,图像必须是连续数组。虽然功能并没有 Image Watch 那么强大,但是随着 CLion 和 Jetbrain 的发展,成就一个帮助开发者正常调试的插件应该是不成问题的。
闲聊结束,开始今天的基础示例。
关于色彩空间的转换规则:https://docs.opencv.org/master/de/d25/imgproc_color_conversions.html
CV_EXPORTS_W void cvtColor( InputArray src, OutputArray dst, int code, int dstCn = 0 );
src
和 code
决定。色彩空间转换代码比较多,自行查阅 API 文档即可。
The conventional ranges for R, G, and B channel values are:
- 0 to 255 for CV_8U images
- 0 to 65535 for CV_16U images
- 0 to 1 for CV_32F images
#include <iostream> #include <opencv2/core.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace cv; using namespace std; int main() { cout << CV_VERSION << endl; Mat src = cv::imread("../image/lena.tif", IMREAD_ANYCOLOR); if (src.empty()) { cout << "图片不存在" << endl; return -1; } namedWindow("input", WINDOW_AUTOSIZE); imshow("input", src); // BGR to HSV Mat hsv; cvtColor(src, hsv, COLOR_BGR2HSV); imshow("hsv", hsv); // BGR to YUV Mat yuv; cvtColor(src, yuv, COLOR_BGR2YUV); imshow("yuv", yuv); // BGR to Lab Mat lab; cvtColor(src, lab, COLOR_BGR2Lab); imshow("lab", lab); // BGR to GRAY Mat gray; cvtColor(src, lab, COLOR_BGR2GRAY); imshow("gray", lab); waitKey(0); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。