tgy*_*tgy 0 opencv image-processing
以下代码将文件中的图像读入cv::Mat对象.
#include <string>
#include <opencv2/opencv.hpp>
cv::Mat load_image(std::string img_path)
{
cv::Mat img = cv::imread(img_path, CV_LOAD_IMAGE_GRAYSCALE);
cv::Scalar intensity = img.at<uchar>(0, 0);
std::cout << intensity << std::endl;
return img;
}
Run Code Online (Sandbox Code Playgroud)
我希望cv::Mat只有一个通道(即图像的强度),但它有4个.
$ ./test_load_image
[164, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
我也试过转换图像
cv::Mat gray(img.size(), CV_8UC1);
img.convertTo(gray, CV_8UC1);
Run Code Online (Sandbox Code Playgroud)
但gray矩阵也是一个4通道.
我想知道是否可以有一个频道cv::Mat.直观地说,这是我在处理灰度(因此,单通道)图像时所期望的.
矩阵是单通道.你只是以错误的方式阅读价值观.
Scalar是一个有4个值的结构.Scalar使用单个值构造a 将导致a Scalar设置为第一个值,剩余部分设置为零.
在您的情况下,只有第一个值是有意义的.零默认为Scalar.
但是,您不需要使用Scalar:
uchar intensity = img.at<uchar>(0, 0);
std::cout << int(intensity) << std::endl; // Print the value, not the ASCII character
Run Code Online (Sandbox Code Playgroud)