opencv c++;加载图像,获得非常大的像素值 我是C++的新手。我加载图像并使用以下代码打印其像素值: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/videoio.hpp> cv::Mat cv_img; cv_img = cv::imread("./input_image/000000.jpg", cv::IMREAD_COLOR); std::cout << cv_img.rows << "," << cv_img.cols << "," << cv_img.channels() << std::endl; for (int i = 0; i < 20; ++i) { for (int j = 0; j < 20; ++j) { std::cout << cv_img.at<cv::Vec3w>(i, j)[0] << ", " << cv_img.at<cv::Vec3w>(i, j)[1] << ", " << cv_img.at<cv::Vec3w>(i, j)[2] << std::endl; } } for (int i = 0; i < 20; ++i) { for (int j = 0; j < 20; ++j) { std::cout << cv_img.at<cv::Vec3i>(i, j)[0] << ", " << cv_img.at<cv::Vec3i>(i, j)[1] << ", " << cv_img.at<cv::Vec3i>(i, j)[2] << std::endl; } }
这绝对是错误的。我尝试使用opencv python加载相同的图像,如下所示:opencv c++;加载图像,获得非常大的像素值 我是C++的新手。我加载图像并使用以下代码打印其像素值: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/videoio.hpp> cv::Mat cv_img; cv_img = cv::imread("./input_image/000000.jpg", cv::IMREAD_COLOR); std::cout << cv_img.rows << "," << cv_img.cols << "," << cv_img.channels() << std::endl; for (int i = 0; i < 20; ++i) { for (int j = 0; j < 20; ++j) { std::cout << cv_img.at<cv::Vec3w>(i, j)[0] << ", " << cv_img.at<cv::Vec3w>(i, j)[1] << ", " << cv_img.at<cv::Vec3w>(i, j)[2] << std::endl; } } for (int i = 0; i < 20; ++i) { for (int j = 0; j < 20; ++j) { std::cout << cv_img.at<cv::Vec3i>(i, j)[0] << ", " << cv_img.at<cv::Vec3i>(i, j)[1] << ", " << cv_img.at<cv::Vec3i>(i, j)[2] << std::endl; } },c++,opencv,C++,Opencv,这绝对是错误的。我尝试使用opencv python加载相同的图像,如下所示: import cv2 img = cv2.imread("./input_image/000000.jpg", cv2.IMREAD_COLOR) print(img[0:20,0:20,:]) [[58 59 55] [30 31 27] [28 29 25] ... [23 24 20] [22 23 19] [21 22 18]] 我得到的正常输出如下所示: import cv2
import cv2
img = cv2.imread("./input_image/000000.jpg", cv2.IMREAD_COLOR)
print(img[0:20,0:20,:])
[[58 59 55]
[30 31 27]
[28 29 25]
...
[23 24 20]
[22 23 19]
[21 22 18]]
我得到的正常输出如下所示:
import cv2
img = cv2.imread("./input_image/000000.jpg", cv2.IMREAD_COLOR)
print(img[0:20,0:20,:])
[[58 59 55]
[30 31 27]
[28 29 25]
...
[23 24 20]
[22 23 19]
[21 22 18]]
<我的C++代码有什么问题?< /P>
我试图替换为cv::Vec3b
,但没有成功。印刷品如下:
, <, 8
, ,
,根据。您应该使用cv::vec3b
访问uchar
数据类型的像素值。那么是什么让您选择cv img.at
和cv img.at
?似乎您刚刚选择了错误的类型。您是否尝试过使用cv::Vec3b
,对于uchar值,应使用此类型。很抱歉,这似乎不起作用。我在问题中更新了它。我还是打印错了。还有其他解决办法吗?谢谢在打印之前,可能需要将其转换为int
。因为数据类型是uchar,所以print语句打印的是ascii码而不是实际值。