投射光线和阴影在表面上

时间:2013-05-01 23:29:42

标签: c++ opencv shadow lighting hsv

您好我正试图从一个表面提取光照和阴影并将其应用到另一种类型的表面。我将图像转换为HSV并提取Hue组件并绘制它,这似乎可以很好地指示照明和阴影的位置。然而,当我将原始图像的色调分量与我的最终图像交换时,我得到了各种不希望的绿色和蓝色。有没有其他技术可以用来投影阴影和灯光?

cvtColor( img0, hsv, CV_BGR2HSV  );

components[0].create( hsv.size(), 1);
components[1].create( hsv.size(), 1);
components[2].create( hsv.size(), 1);

split(hsv, components);

...

cvtColor( drawing, hsv_output, CV_BGR2HSV  );

components_output[0].create( hsv.size(), 1);
components_output[1].create( hsv.size(), 1);
components_output[2].create( hsv.size(), 1);

split(hsv_output, components_output);

components_output[0] = 0.5 * components_output[0] + 0.5 * components[0];

int ch[] = {0 , 0};
mixChannels(&components_output[0], 1, &hsv_output, 1, ch, 1);

cvtColor( hsv_output, drawing, CV_HSV2BGR  );

0 个答案:

没有答案