0

您好我正在尝试从一个表面提取照明和阴影并将其应用于另一种类型的表面。我将图像转换为 HSV 并提取色调组件并绘制它,这似乎可以很好地指示照明和阴影的位置。但是,当我将原始图像的色调分量与最终图像交换时,我会得到各种不需要的绿色和蓝色。是否有任何其他技术可用于投射阴影和照明?

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  );
4

0 回答 0