我有 C++ 和 OpenCV 3.1,我用这些代码将 RGB 三个通道分开:
Mat src = imread("original_image.jpg",CV_LOAD_IMAGE_COLOR);
Mat bgr[3] , bluemat ;
split(src,bgr);
bluemat = bgr[0];
std::cout << "bluemat.at<int>(0,1); : " << bluemat.at<int>(0,1) << '\n';
奇怪的是它打印出一个大数字:1415208581,这是为什么呢?
不是应该在 0-255 范围内吗?为什么不是?
(扩大搜索评论)
openCV 的一个特点是cv::Mat
图像类型是一个基于原始 C 版本库的非常简单的对象。
的cv::Mat
包含一个字段,以像素类型,但数据被简单地存储为存储器字节的块。您可以根据需要使用此内存块来存储和访问像素。它使与其他库的链接变得非常灵活和容易,但这意味着您需要手动跟踪数据是什么。
因此,data.at<int>(0,0)
将提取第一个像素,就好像数据是整数一样(无论您平台上的整数是什么),data.at<uchar> (0,0)
都会以字节形式获取第一个像素(这通常是您想要的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句