C++ openCV加载类型为CV_8UC4的图像
我需要加载任何可能支持的类型的图像,并将其转换为BGRA(CV_8UC4)C++ openCV加载类型为CV_8UC4的图像,c++,opencv,C++,Opencv,我需要加载任何可能支持的类型的图像,并将其转换为BGRA(CV_8UC4) #包括 #包括 int main() { std::字符串文件路径; cv::Mat image=cv::imread(文件路径,cv\u加载\u图像\u未更改); std::coutcv::imread(宽度、高度、cv_-LOAD_-IMAGE_-COLOR);甚至不会。请建议加载后获得8位深度和4个通道的正确方法在哪种意义上“不起作用”?请详细说明,并理想地向我们展示预期与实际结果。|还请注意,当使用cv_-LOA
#包括
#包括
int main()
{
std::字符串文件路径;
cv::Mat image=cv::imread(文件路径,cv\u加载\u图像\u未更改);
std::coutcv::imread(宽度、高度、cv_-LOAD_-IMAGE_-COLOR);
甚至不会。请建议加载后获得8位深度和4个通道的正确方法在哪种意义上“不起作用”?请详细说明,并理想地向我们展示预期与实际结果。|还请注意,当使用cv_-LOAD_-IMAGE_-COLOR
“alpha通道,如果有的话,将从输出图像中剥离”--这就是您想要的吗?如何处理“任何可能支持的类型?”",我会使用LOAD_IMAGE\u ANYDEPTH
,然后明确地处理各种情况。我更新了问题…你能检查一下这个代码是否是防故障的,我会在最后总是得到CV_8UC4图像。我已经测试了一些图像,这很有效。请建议任何需要编辑的好工作。我会在时为这个情况添加一些处理e> imread
无法加载图像(例如,在当前程序中,因为文件路径
为空)并生成一条有意义的错误消息。我可能会切换开关的顺序--首先进行深度转换。这是一个针对同时更改深度和通道数的情况的小优化。这样,中间数组将需要更少的内存。最后,最好对其进行重构,使其具有一个性能更好的函数然后编写单元测试并涵盖所有情况。
#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*******************/
}