openCV加载类型为CV_8UC4的图像

时间:2017-06-30 17:29:46

标签: c++ opencv

我需要加载任何可能支持类型的图像并将其转换为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根据图像的缩放版本使用内存?

感谢您的帮助。

0 个答案:

没有答案