안녕하세요, 인터넷에서 RGB 픽셀 값을 HSV로 변환하는 알고리즘을 많이 찾을 수 있지만 표시 할 수있는 기능을 찾을 수 없습니다. MS Visual Studio 2013 및 openCV 라이브러리를 사용하고 있습니다. HSV 이미지를 얻는 기능이 내장되어 있습니다. cvtColor (obrazeczek1, obrazeczek1, CV_BGR2HSV);하지만이 기능없이이 작업을 시도합니다.C++에서 RGBtoHSV 변환기 함수를 사용한 후 HSV 이미지를 표시하는 방법은 무엇입니까?
#define NORMALIZE_RGB(x) \
(x > 255 ? 255 : (x < 0 ? 0 : x))
cv::Mat rgb2grey(cv::Mat& I)
{
CV_Assert(I.depth() != sizeof(uchar));
cv::Mat res(I.rows, I.cols, CV_8UC3);
switch (I.channels()) {
case 3:
cv::Mat_<cv::Vec3b> _I = I;
cv::Mat_<cv::Vec3b> _R = res;
for (int i = 0; i < I.rows; ++i)
for (int j = 0; j < I.cols; ++j){
int grey = ((_I(i, j)[0]) + (_I(i, j)[1]) + (_I(i, j)[2]))/3;
_I(i, j)[0] = NORMALIZE_RGB(grey);
_I(i, j)[1] = NORMALIZE_RGB(grey);
_I(i, j)[2] = NORMALIZE_RGB(grey);
}
res = _I;
break;
}
return res;
}
및 기능과 디스플레이 이미지를 호출 : 예를 들어, 함수를 사용하여 회색 이미지 I를 얻을 수
cv::Mat image = cv::imread("name.jpg");
cv::Mat img = rgb2grey(image);
cv::imshow("Grey image", img);
는 여기 Algorithm to convert RGB to HSV and HSV to RGB in range 0-255 for both 팁을 발견했다. RGB 픽셀을 HSV로 변환하는 방법을 알고 있지만이 행렬을 표시하는 방법은 입니다. imshow? 나는 또한 rgb2hsv 함수를 찾았지만 무엇을 변경해야하는지 알지 못한다. 이것은 함수입니다.
void rgb2hsv(double r, double g, double b, double &h, double &s, double &v)
{
v = max(max(r, g), b);
double t = min(min(r, g), b);
double delta = v - t;
if (v != 0.0)
s = delta/v;
else
s = 0.0;
if (s == 0.0)
h = 0.0;
else
{
if (r == v)
h = (g - b)/delta;
else
if (g == v)
h = 2.0 + (b - r)/delta;
else
if (b == v)
h = 4.0 + (r - g)/delta;
h = h * 60.0;
if (h < 0.0)
h += 360;
}
}
여기 비슷한 질문이 없으므로 plese help.
미디어 나 그래픽 컨트롤러는 무엇입니까? 많은 그래픽 컨트롤러에는 HSV를 직접 지원하는 API가 없습니다. 컬러 프린터로 보내십니까? –
나는 마더 보드에 그래픽 카드 (인텔 HD3000) 만 내장했지만이 내장 기능 CV_BGR2HSV를 사용하면 색상 차이 RGB와 HSV가 표시됩니다. –
HSV 변경 사항을 다시 RGB로 변환해야 표시 될 수 있습니다. –