我有一个颜色,想将其转换为另一种颜色空间。是否可以直接使用 cvtColor
转换 cv::Vec3f
而不创建 1x1 的 cv::Mat
,并填充该像素,对 cv::Mat
使用 cvtColor
,然后从输出中获取唯一的像素?我尝试了以下方法,但似乎无法将向量传递给它。
有什么建议吗?
#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
?如果你只想转换一个向量,我认为编写一个转换函数会更容易。 - Quang Hoangcv::Mat_<cv::Vec3f> bgr;
,因为源和目标必须具有相同的类型。此外,您可以使用Mat3f
,它是Mat_<cv::Vec3f>
的 typedef。 - Miki