Основная идея заключается в том, чтобы позволить пользователю перекрашивать конкретный пользовательский выбор на стене.
В настоящее время я реализовал эту функцию с помощью cvFloodFill
(помогает подготовить изображение маски), что может помочь мне изменить относительное значение HSV
для стены, чтобы я мог удерживать края. но проблема с этим решением заключается в том, что он работает с цветом, и все стены перекрашиваются вместо отдельной стены, выбранной пользователем.
Я также пробовал обнаружение canny edge, но он просто смог обнаружить край, но не смог преобразовать его в область.
Ниже приведен код, который я использую для функции repaint
-
Подготовить маску
cvFloodFill(mask, new CvPoint(295, 75), new CvScalar(255, 255, 255,0), cvScalarAll(1), cvScalarAll(1), null, 4, null);
-
разделенный канал
cvSplit(hsvImage, hChannel, sChannel, vChannel, null);
-
изменить цвет
cvAddS(vChannel, new CvScalar(255*(0.76-0.40),0,0,0), vChannel, mask);
Как мы можем обнаружить ребра и соответствующую область из изображения.
Я ищу решение, которое может быть отличным от opencv
, но должно быть возможно для iPhone и Android.
Edit
Я могу добиться некоторого результата, как показано ниже, используя следующие шаги.
cvCvtColor(image, gray, CV_BGR2GRAY);
cvSmooth(gray,smooth,CV_GAUSSIAN,7,7,0,0);
cvCanny(smooth, canny, 10, 250, 5);
есть две проблемы с этим выходом, не уверены, как их разрешить 1. близко к краям 2. Удалите небольшие края.