gpt4 book ai didi

c++ - 使用 cvtColor 转换单一颜色

转载 作者:可可西里 更新时间:2023-11-01 18:36:44 25 4
gpt4 key购买 nike

我有一种颜色要转换为不同的颜色空间。是否可以直接在 cv::Vec3f 上使用 cvtColor 而无需创建 1x1 cv::Mat 并用该像素填充它,使用cv::Mat 上的 cvtColor,然后从输出中获取唯一的像素?我尝试了以下方法,但它似乎不喜欢传递 vector 。

有什么建议吗?

#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;
}

最佳答案

您的第二种方法是正确的,但是您在 cvtColor 中有不同类型的源和目标,这会导致错误。

一定要有相同类型的hsvbgrCV_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 Mat_<Vec3f> Mat3f;

关于c++ - 使用 cvtColor 转换单一颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com