Полагаю, я уже ответил на вопрос в своем предыдущем комментарии, а теперь думаю об этом.Более конкретно,
uchar img_h=*(img_hsv.data+i*img_hsv.step+j*img_hsv.elemSize());
дает вам пиксель в точке (i, j), а (i, j) инициализируется значением (0,0).Таким образом, вы получаете полностью черное изображение, если первый пиксель в точке (0,0) падает ниже вашего порога, а белое изображение в противном случае.Скорее всего, вы захотите пересчитывать img_h, img_s и img_v в каждой итерации.
В pre-cv2.x был макрос для доступа к пикселям как CV_IMAGE_ELEM, пожалуйста, прочитайте руководство по замене.Не должно ли быть что-то вроде img_hsv (i, j) сейчас?