Когда я говорил, что OpenCV реализует морфологические преобразования всего двумя функциями, я, разумеется, лукавил.
Есть ещё одна замечательная функция — cvMorphologyEx(). Она обеспечивает более сложные морфологические преобразования изображения.
CVAPI(void) cvMorphologyEx( const CvArr* src, CvArr* dst,
CvArr* temp, IplConvKernel* element,
int operation, int iterations CV_DEFAULT(1) );
— выполняет сложное морфологическое преобразование
src — исходное изображение
dst — изображение для сохранения результата
temp — для промежуточного хранения результатов (размер изображения должен совпадать с размером исходного изображения) — требуется при определённом значении operation
operation — определяет тип морфологического преобразования:
CV_MOP_OPEN и CV_MOP_CLOSE — комбинация сужения и расширения: CV_MOP_OPEN — сначала сужается, а затем расширяется. Обычно используется для подсчёта регионов на двоичном изображении.
CV_MOP_CLOSE — сначала расширяется, а затем сужается. Обычно используется для уменьшения шумовых выбросов на границах регионов.
! Порядок выполнения операции CV_MOP_CLOSE при числе итераций iterations==2: Dilate-Dilate-Erode-Erode !
CV_MOP_GRADIENT:
gradient(src) = Dilate(src)–Erode(src)
Результатом этой операции над двоичным изображением станет выделение периметров существующих пятен. На картинке с градациями серого градиент покажет как быстро меняется яркость (поэтому и называется — градиент).
CV_MOP_TOPHAT и CV_MOP_BLACKHAT:
TopHat(src) = src–Open(src)
BlackHat(src) = Close(src)–src
Есть предложение по поводу кода, дабы не делать большую нагрузку на компьютер лучше обновлять картинки по изменению ползунков. Для этого достаточно немного модифицировать код.
1. cvWaitKey поставить с параметром 0.
2. В обработчики ползунков, после присваивания значений добавить следующую строчку:
keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY,0); //Нажата клавиша пробел
не могу понять зачем всовывать ее в обработчик ползунков. и вообще странные эти обработчики, которые вызываются однажды и работают как то постоянно, т.е. это не противоречит концепции с++, что выполненная функция должна стереться с лица памяти?)
где можно посмотреть прототип функции keybd_event() она из она библиотеки openCV?
Комментарии (7)
RSS свернуть / развернутьНужно пере строкой
cvReleaseStructuringElement(&Kern);
добавить следующее:
cvReleaseImage(&Temp);
:)
Mur
noonv
А потом будет открыта тайна какое практическое значение можно выудить из этих методов, а то уже интрига есть. Уж больно интересно :)
Mur
1. cvWaitKey поставить с параметром 0.
2. В обработчики ползунков, после присваивания значений добавить следующую строчку:
keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY,0); //Нажата клавиша пробел
Mur
не могу понять зачем всовывать ее в обработчик ползунков. и вообще странные эти обработчики, которые вызываются однажды и работают как то постоянно, т.е. это не противоречит концепции с++, что выполненная функция должна стереться с лица памяти?)
где можно посмотреть прототип функции keybd_event() она из она библиотеки openCV?
Zybr
void myTrackbarIterations(int pos) { radius = pos;}
должен выглядеть как
void myTrackbarIterations(int pos) { iterations = pos;}
Я что-то упускаю?
mvch
noonv
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.