CVAPI(void) cvErode( const CvArr* src, CvArr* dst,
IplConvKernel* element CV_DEFAULT(NULL),
int iterations CV_DEFAULT(1) );
— размывает(операция сужения) изображение с использованием фильтра(ядра) один или несколько раз,
если element == NULL используется ядро 3х3
(изображение формируется из локальных минимумов — т.е. будут увеличиваться тёмные области)
CVAPI(void) cvDilate( const CvArr* src, CvArr* dst,
IplConvKernel* element CV_DEFAULT(NULL),
int iterations CV_DEFAULT(1) );
— растягивает(операция расширения) изображение с использованием фильтра(ядра) один или несколько раз,
если element == NULL используется ядро 3х3
(изображение формируется из локальных максимумов — т.е. будут увеличиваться светлые области)
// #define CV_DEFAULT(val) = val
src — исходное изображение
dst — получаемое изображение
element — структурирующий элемент (ядро) по-умолчанию NULL — соответствует ядру 3x3 с якорем по-центру.
[ ][ ][ ]
[ ][+][ ]
[ ][ ][ ]
структура ядра:
typedef struct _IplConvKernel
{
int nCols;
int nRows;
int anchorX;
int anchorY;
int *values;
int nShiftR;
}
IplConvKernel;
iterations — число итераций (сколько раз повторить морфологическое преобразование)
! обе функции позволяют, чтобы в качесте dst выступало исходное изображение src.
В cvErode() ядро накладывается на изображение и на месте якоря (центр ядра) остаётся минимальное значение, лежащее под ядром (в случае cvDilate() — наоборот — максимальное )
Эрозия (размывание/сужение) изображения обычно используется для избавления от случайных вкраплений на изображении. Идея состоит в том, что вкрапления при размывании устранятся, тогда как крупные и соответсвенно более визуально-значимые регионы остаются.
Растягивание (расширение) же, по идее, так же должно устранять шум и способствовать объединению областей изображения, которые были разделены шумом, тенями, etc.
Применение же небольшого растягивания должно сплавить эти области в одну.
Морфологические операции, чаще всего, применяются над двоичными изображениями, которые получаются после порогового преобразования (thresholding).
Создание ядра произвольной формы осуществляется функцией cvCreateStructuringElementEx():
CVAPI(IplConvKernel*) cvCreateStructuringElementEx( int cols, int rows, int anchor_x, int anchor_y, int shape, int* values CV_DEFAULT(NULL) );
— создание структурирующего элемента (ядра) для морфологических операций.
например, cvErode() или cvDilate()
cols — число колонок ядра
rows — число стор ядра
anchor_x — относительное горизонтальное смещение якоря ядра
anchor_y — относительное вертикальное смещение якоря ядра
shape — форма ядра:
— в последнем случае, форму определяет пользователь через values, которая содержит маску, определяющую какие соседние пиксели должны учитываться
values — указатель на массив, в котором ненулевые элементы определяют значимые пиксели. Если values==NULL все элементы считаются ненулевыми.
(этот параметр учитывается только в случае shape==CV_SHAPE_CUSTOM)
CVAPI(void) cvReleaseStructuringElement( IplConvKernel** element );
— освобождение памяти, выделенной под структурирующий элемент(ядро)
Выбирая различную структуру ядра можно решать различные задачи обработки изображений:
— подавление шумов;
— выделение границ объекта;
— выделение скелета объекта;
с предыдущих вылетал .exe, а теперь тема с этим C:\Program. Но откуда оно взялось, я только что поняла: когда в линкере-инпуте прописываешь пути к .lib, там стоит C:\Program Files\OpenCV и тд. Так вот когда я нажимаю ОК, закрываю все, запускаю прогу, появляется эта ошибка. Если снова зайти в линкер, то там вместо того, что я прописывала, появляется следующая картина:
C:\Program
Files\OpenCV\и тд. И почему он слово «Files» перекидывает на другую строчку, мне ваще не понятно ><
думаю, нужно просто пересобрать библиотеку под 2008-й и всё заработает ;) библиотека пересобирается с помощью CMake так же как описано про установку 2.0
А вопрос мой вот в чём:
Позволяет ли OpenCV реализовать слушателей трэкбара без колбэков?
(Пишу на JavaCV, с колюэком возникли проблемы, тк функции типа cvCreateTrackbar(...) не принимают в качестве параметра указатель на функцию)
Комментарии (18)
RSS свернуть / развернутьв чем косяк?=\
NoHope
noonv
NoHope
noonv
NoHope
noonv
NoHope
вот что он пишет теперь…
NoHope
noonv
C:\Program
Files\OpenCV\и тд. И почему он слово «Files» перекидывает на другую строчку, мне ваще не понятно ><
NoHope
NoHope
NoHope
noonv
NoHope
Скажите, а как выделять скелет с помощью этого всего?
NoHope
// функция-обработчик ползунка —
// число итераций
void myTrackbarIterations(int pos) {
// radius = pos;
iterations = pos;
}
А вопрос мой вот в чём:
Позволяет ли OpenCV реализовать слушателей трэкбара без колбэков?
(Пишу на JavaCV, с колюэком возникли проблемы, тк функции типа cvCreateTrackbar(...) не принимают в качестве параметра указатель на функцию)
Kseniya
кажется — нет, но ведь никто не мешает использовать вместо OpenCV-х трэкбаров любые другие ;)
noonv
Kseniya
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.