【发布时间】:2019-07-26 09:00:16
【问题描述】:
我是 C++ opencv 的新手。我使用以下代码加载图像并打印其像素值:
#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;
}
}
但是当我打印它的像素时,我得到如下值:
5139, 4882, 4628
5139, 4882, 4628
269488655, 336662803, 320147986
320017682, 370349078, 336990996
这绝对是错误的。我尝试使用 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]]
我的 c++ 代码有什么问题?
我尝试替换为cv::Vec3b,但没有成功。印刷品如下:
, <, 8
, ,
(很多空格)
谢谢大家帮助我!
【问题讨论】:
-
那么是什么让你选择了
cv_img.at<cv::Vec3w>和cv_img.at<cv::Vec3i>?似乎您只是选择了错误的类型。 -
你试过
cv::Vec3b,对于uchar值应该使用这种类型。