我需要加载任何可能支持类型的图像并将其转换为BGRA(CV_8UC4)。
#include <opencv2/opencv.hpp>
#include <iostream>
int main()
{
std::string filePath;
cv::Mat image = cv::imread(filePath, CV_LOAD_IMAGE_UNCHANGED);
std::cout << "HEIGHT: " << image.rows << " Width: " << image.cols << std::endl;
std::cout << "CHANNELS: " << image.channels() << std::endl;
switch(image.channels())
{
case 1:
{
cvtColor(image, image, CV_GRAY2BGRA);
std::cout << "CHANNELS: " << image.channels() << std::endl;
break;
}
case 3:
{
cvtColor(image, image, CV_BGR2BGRA);
std::cout << "CHANNELS: " << image.channels() << std::endl;
break;
}
}
switch(image.depth())
{
case CV_8U:
{
/* DO NOTHING AS IT IS DESIRED */
break;
}
default:
{
image.convertTo(image, CV_8U);
image.depth() == CV_8U ? std::cout << "CONVERSION SUCCESSFUL" << std::endl : std::cout << "CONVERSION UNSUCCESSFUL" << std::endl;
}
}
cv::resize(image, image, cvSize(1920, 1080));
/*************Now do desired operations*******************/
}
只是想确定是否没有条件丢失。你能否检查一下这种类型的图像是否可能无法给我CV_8UC4图像?
请建议是否有更好的方法。
****** *******编辑
我能够实现上述目标。但现在我面临另一个问题
我需要对尺寸小于1920x1080的图像进行操作,因此当我加载图像时,我将其调整为较小的尺寸。 我面临的问题是分辨率非常高的图像(因为我只能使用500 MB的内存,但cv :: Mat的分配大小超过了。因此即使我必须操作缩放图像(较小的分辨率)我在调整大小之前无法加载原始图像。
是否可以选择在加载时缩放图像,以便cv :: Mat根据图像的缩放版本使用内存?
感谢您的帮助。