我需要读取大量图像,对速度要求很高,并且只需要处理彩色图像的蓝色通道。如果我用cv::imread(imgName, CV_LOAD_IMAGE_COLOR);
它读取图像将会很长时间,所以我只想读取一个彩色图像通道。怎么做 ???非常感谢 !!
OpenCV 不提供任何仅加载特定通道的方法。但是,您有几个选择。
加载为彩色图像并提取您需要的通道
cv::Mat3b img("path/to/image", cv::IMREAD_COLOR);
cv::Mat1b blue;
cv::extractChannel(img, blue, 0);
Run Code Online (Sandbox Code Playgroud)
这比使用该方法要快一点split
,但您仍然需要加载彩色图像。
在预处理阶段,加载所有图像(您可以使用glob将所有图像检索到文件夹中),提取蓝色通道并将其存储为灰度。然后您可以将图像加载为灰度。
// Preprocessing
cv::String folder = "your_folder_with_images/*.jpg";
std::vector<cv::String> filenames;
cv::glob(folder, filenames);
for (size_t i = 0; i < std::filenames.size(); ++i)
{
cv::Mat3b img = cv::imread(filenames[i], cv::IMREAD_COLOR);
cv::Mat1b blue;
cv::extractChannel(img, blue, 0);
cv::imwrite("some/other/name", blue);
}
// Processing
cv::Mat1b blue = imread("path/to/image", cv::IMREAD_UNCHANGED);
Run Code Online (Sandbox Code Playgroud)
您可以通过以二进制格式保存/加载图像来提高速度:
// Preprocessing
...
matwrite("some/other/name", blue);
// Processing
cv::Mat1b blue = matread("path/to/image");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4454 次 |
最近记录: |