C++ openCV加载类型为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

我需要加载任何可能支持的类型的图像,并将其转换为BGRA(CV_8UC4)

#包括
#包括
int main()
{
std::字符串文件路径;
cv::Mat image=cv::imread(文件路径,cv\u加载\u图像\u未更改);

std::cout
cv::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*******************/
}