转换单一的颜色与cvtColor转换单一的颜色与cvtColor(Convert a single

2019-05-12 02:58发布

我有我想转换到不同的色彩空间的颜色。 是否有可能使用cvtColorcv::Vec3f的情况下直接创建一个1x1 cv::Mat ,并与像素填充它,使用cvtColorcv::Mat ,然后让唯一的像素进行输出? 我曾尝试以下,但它似乎不喜欢获得通过一个载体。

有什么建议?

#include <iostream>

#include <opencv2/opencv.hpp>

int main(int, char*[])
{
    cv::Vec3f hsv;
    hsv[0] = .9;
    hsv[1] = .8;
    hsv[2] = .7;

    std::cout << "HSV: " << hsv << std::endl;

    cv::Vec3b bgr;
    cvtColor(hsv, bgr, CV_HSV2BGR); // OpenCV Error: Assertion failed (scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor

    std::cout << "BGR: " << bgr << std::endl; 

    return EXIT_SUCCESS;
}

我也试过这个,却得到了一个不同的错误:

#include <iostream>

#include <opencv2/opencv.hpp>

int main(int, char*[])
{
    cv::Mat_<cv::Vec3f> hsv(cv::Vec3f(0.7, 0.7, 0.8));

    std::cout << "HSV: " << hsv << std::endl;

    cv::Mat_<cv::Vec3b> bgr;

    cvtColor(hsv, bgr, CV_HSV2BGR); // OpenCV Error: Assertion failed (!fixedType() || ((Mat*)obj)->type() == mtype) in create

    std::cout << "BGR: " << bgr << std::endl;

    return EXIT_SUCCESS;
}

Answer 1:

你的第二个方法是正确的,但你必须源和不同类型的目的地在cvtColor ,并导致错误。

一定要同时拥有hsvbgr同一类型, CV_32F这里:

#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    cv::Mat3f hsv(cv::Vec3f(0.7, 0.7, 0.8));

    std::cout << "HSV: " << hsv << std::endl;

    cv::Mat3f bgr;
    cvtColor(hsv, bgr, CV_HSV2BGR); 

    std::cout << "BGR: " << bgr << std::endl;

    return 0;
}

您可以使用Mat3f赘述。 这只是一个typedef:

typedef Mat_<Vec3f> Mat3f;


文章来源: Convert a single color with cvtColor