gpt4 book ai didi

opencv - (opencv) imread 与 CV_LOAD_IMAGE_GRAYSCALE 产生 4 channel 垫

转载 作者:行者123 更新时间:2023-12-02 16:47:08 26 4
gpt4 key购买 nike

以下代码从文件中读取图像到 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;
}

我希望 cv::Mat只有一个 channel (即图像的强度)但它有 4 个。
$ ./test_load_image
[164, 0, 0, 0]

我也尝试用
cv::Mat gray(img.size(), CV_8UC1);
img.convertTo(gray, CV_8UC1);

但是 gray矩阵也是一个 4 channel 之一。

我想知道是否可以有一个 channel cv::Mat .直观地说,这就是我在处理灰度(因此,单 channel )图像时所期望的。

最佳答案

矩阵是单 channel 的。您只是以错误的方式读取值。
Scalar是一个具有 4 个值的结构。构建 Scalar使用单个值将导致 Scalar设置第一个值,其余为零。

在您的情况下,只有第一个值才有意义。 Scalar 的默认值为零.

但是,您不需要使用 Scalar :

uchar intensity = img.at<uchar>(0, 0);
std::cout << int(intensity) << std::endl; // Print the value, not the ASCII character

关于opencv - (opencv) imread 与 CV_LOAD_IMAGE_GRAYSCALE 产生 4 channel 垫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492083/

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