为什么OpenCV返回像素强度的奇怪值
Why OpenCV return strange value for pixel intensity?
我已经使用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范围内吗?为什么不是?
(扩展搜索评论(
a opencv的功能是cv::Mat
图像类型是一个非常简单的对象,基于库的原始C版本。
cv::Mat
包含一个提供像素类型的字段,但数据仅作为内存字节的块存储。您可以使用此内存块来存储和访问像素,并可以根据需要进行访问。它使其非常灵活且易于与其他库链接,但意味着您需要手动跟踪数据是什么。
因此,data.at<int>(0,0)
会提取第一个像素,就好像数据是ints(您的平台上的INT(一样,data.at<uchar> (0,0)
将将第一个像素作为字节(通常是您想要的(。
这里的主要区别是将内存字节投入到uchar vs int。您所拥有的数据的哪种形式取决于您如何读取它。CV_LOAD_IMAGE_COLOR将图像读为16位/32位值。我无法编译您给我的代码,因为将数据转换为int所创建的内存问题。
现在,如果您使用uchar
,则将解决。但是,cout
打印字符的问题与<<
Mat src = imread("1.jpg", CV_LOAD_IMAGE_COLOR);
Mat bgr[3], bluemat;
split(src, bgr);
bluemat = bgr[0];
std::cout << "bluemat.at<uchar>(0,1); : " << (int)bluemat.at<uchar>(0, 1) << 'n';
我更改的只是插入Typecast int。此问题在这里扩展,但告诉输出流是一个数字,而不是字符。
相关文章:
- imread() 仍然返回空垫子,尽管在 openCV 4.0.0 中寻址正确
- G++ 在尝试使用 G++ 使用 openCV 进行编译后返回错误
- Opencv CAP_PROP_FRAME_COUNT返回负数
- 为什么OpenCV返回像素强度的奇怪值
- MacOS - 编译 c++ OpenCv 返回体系结构x86_64找不到的符号
- 从OpenCV函数C NDK访问返回的值
- 在Android Studio中使用NDK GrabCut返回的OpenCV总是黑色面具
- 将 Opencv Mat 返回到节点.js v8
- OpenCV waitKey() 函数在 mac 上总是返回 255
- OpenCV waitKey() 应该返回 -1,但没有
- 在OpenCV中,DescriptorExtractor类的descriptorType()返回什么
- Boost thread_group 返回空矩阵 (openCV)
- OpenCV FREAK 返回了太多的异常值
- OpenCV cvCaptureFromCAM 使用 PS3 Eye 返回 null
- OpenCV findContours 导致调试断言在返回时失败
- OpenCV Countour区域返回零
- OPENCV C 的SVM返回同一类图像的相同置信度得分
- OpenCV:convertTo返回白色图像(有时)
- OpenCV C++.返回垫子然后将其保存到文件
- 为什么pkg-config——libs opencv返回库位置而不是库本身?