gpt4 book ai didi

c++ - 垫类型转换和访问单个像素的问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:29 25 4
gpt4 key购买 nike

我在使用 OpenCV 编程时遇到了麻烦。
时间长了,我发现,cout << mat 和个别像素值经过类型转换后的结果是不一样的。

这是代码

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;

int main() {
Mat a = (Mat_<int>(3, 3) << 1, 2, 3, 4, 5, 6, 7, 8, 9);
cout << "Initial mat type: " << a.type() << endl;
cout << "Pos(1, 1): " << a.at<int>(1, 1) << endl;

a.convertTo(a, CV_8U);
cout << "CV_8U converted mat type: " << a.type() << endl;
cout << "Mat content: \n" << a << endl;
cout << "Pos(1, 1): " << a.at<int>(1, 1) << endl;

return 0;
}

结果在这里:

Initial mat type: 4 // CV_32S 
Pos(1, 1): 5
CV_8U converted mat type: 0 // CV_8U
Mat content:
[1, 2, 3;
4, 5, 6;
7, 8, 9]
Pos(1, 1): -1254749944

这意味着,在从 CV_32S 转换为 CV_8U 之后,我从 cout << a 得到了正确的矩阵,但是当访问单个像素时,我变得一团糟:|
你能帮助我吗?谢谢!

最佳答案

因为您已经将值转换为不同的类型,所以您需要使用不同的类型访问它们:

cout << "Pos(1, 1): " << static_cast<int>(a.at<uchar>(1, 1)) << endl;

关于c++ - 垫类型转换和访问单个像素的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19909444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com