我刚读过关于HSV的内容,我发现Hue实际上指的是颜色在什么颜色范围内(如粉红色,橙色等),饱和度指定了它的白色倾向(下层)值是,颜色越白,关于值,它与饱和度相同,但关于黑色。我希望到目前为止我已经理解正确,因为我的实际问题是,如何从像素中获得这些H S V值?有没有办法像RGB一样获取值?或者有没有办法将RGB值转换为HSV?有人可以帮我吗?谢谢。 (我正在使用C ++,我不应该使用OpenCV,我只能使用CImg和Imagemagick。)
答案 0 :(得分:1)
如何从像素中获取这些H S V值?有没有办法像RGB一样获取值?或者有没有办法将RGB值转换为HSV?
使用magick++,您可以将色彩空间转换为HSV,并将颜色作为RGB访问。虽然方法仍然是红色(色调),绿色(饱和度),和蓝色(值)。
#include <iostream>
#include <Magick++.h>
using namespace Magick;
using namespace std;
int main(int argc, const char * argv[]) {
InitializeMagick(*argv);
Image
rgb_img,
hsv_img;
rgb_img.read("rose:");
hsv_img.read("rose:");
Color point;
// Get Color @ index 10x10
point = rgb_img.pixelColor(10, 10);
cout << "Pixel Type : Default RGB Pixel" << endl;
cout << "First Channel : " << point.quantumRed() / QuantumRange << endl;
cout << "Second Channel : " << point.quantumGreen() / QuantumRange << endl;
cout << "Third Channel : " << point.quantumBlue() / QuantumRange << endl;
cout << endl;
// Convert to HSV
hsv_img.colorSpace(HSVColorspace);
// Get Color @ index 10x10
point = hsv_img.pixelColor(10, 10);
cout << "Pixel Type : HSV Pixel" << endl;
cout << "First Channel : " << point.quantumRed() / QuantumRange << endl;
cout << "Second Channel : " << point.quantumGreen() / QuantumRange << endl;
cout << "Third Channel : " << point.quantumBlue() / QuantumRange << endl;
cout << endl;
return 0;
}
哪个会输出...
Pixel Type : Default RGB Pixel
First Channel : 0.282353
Second Channel : 0.25098
Third Channel : 0.223529
Pixel Type : HSV Pixel
First Channel : 0.0777778
Second Channel : 0.208333
Third Channel : 0.282353
答案 1 :(得分:0)
在Imagemagick命令行中,您可以执行以下操作:
convert -size 1x1 xc:red -colorspace HSV -format "%[pixel:u.p{0,0}]\n" info:
hsv(0,100%,100%)
或
convert lena.png[3x3+10+10] -colorspace HSV txt:
# ImageMagick pixel enumeration: 3,3,65535,hsv
0,0: (1944,34369,57825) #0886E1 hsv(11,52%,88%)
1,0: (1560,32622,57825) #067FE1 hsv(9,50%,88%)
2,0: (1643,33060,57568) #0681E0 hsv(9,50%,88%)
0,1: (2072,33787,57825) #0883E1 hsv(11,52%,88%)
1,1: (2129,34369,57825) #0886E1 hsv(12,52%,88%)
2,1: (2036,34678,57311) #0887DF hsv(11,53%,87%)
0,2: (1805,33347,58082) #0782E2 hsv(10,51%,89%)
1,2: (2012,33057,58082) #0881E2 hsv(11,50%,89%)
2,2: (1916,33204,57825) #0781E1 hsv(11,51%,88%)
抱歉,我不懂C ++。我认为您需要做的就是使用等效的-colorspace HSV,然后执行您正常的RGB操作。
如果这不起作用,那么您可以在https://www.imagemagick.org/discourse-server/
上的Imagemagick话务服务器用户或Magick ++论坛上询问P.S。看http://cimg.eu/reference/structcimg__library_1_1CImg.html#a6c0ab36ca2418c9b62590cdfdcbdc793,我看到了
CImg< T > & RGBtoHSV ()
Convert pixel values from RGB to HSV color spaces.