我有一种颜色想要转换为不同的颜色空间.是否可以直接在 cv::Vec3f 上使用 cvtColor 而无需创建 1x1 cv::Mat 并用该像素填充它,使用cvtColor 在 cv::Mat 上,然后从输出中获取唯一的像素?我尝试了以下方法,但似乎不喜欢传递向量.
I have a color that I want to convert to a different color space. Is it possible to use cvtColor on a cv::Vec3f directly without creating a 1x1 cv::Mat and populating it with that pixel, using cvtColor on the cv::Mat, then getting the only pixel out of the output? I have tried the following, but it doesn't seem to like getting passed a 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;
}
我也试过这个,但得到一个不同的错误:
I also tried this, but get a different error:
#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 中有不同类型的源和目标,这会导致错误.
Your second approach is correct, but you have source and destination of different types in cvtColor, and that causes the error.
确保 hsv 和 bgr 的类型相同,CV_32F 在这里:
Be sure to have both hsv and bgr of the same type, CV_32F here:
#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.这只是一个类型定义:
You can use Mat3f for brevity. It's just a typedef:
typedef Mat_<Vec3f> Mat3f;
这篇关于使用 cvtColor 转换单一颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
断言失败(size.width>0 && size.height&gAssertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(断言失败(size.width0 amp;amp; size.height0))
在 C++ 中旋转图像而不使用 OpenCV 函数Rotate an image in C++ without using OpenCV functions(在 C++ 中旋转图像而不使用 OpenCV 函数)
OpenCV:处理每一帧OpenCV: process every frame(OpenCV:处理每一帧)
为什么我不能在 openCV 中打开 avi 视频?Why can#39;t I open avi video in openCV?(为什么我不能在 openCV 中打开 avi 视频?)
OpenCV 无法设置 SVM 参数OpenCV unable to set up SVM Parameters(OpenCV 无法设置 SVM 参数)
使用 OpenCV 将图像旋转 90 度的最简单方法?Easiest way to rotate by 90 degrees an image using OpenCV?(使用 OpenCV 将图像旋转 90 度的最简单方法?)