Перейти к содержимому
Compvision.ru

outl4w

Пользователи
  • Количество публикаций

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Новичек

О outl4w

  • Звание
    Новичок
  1. проблема с cvThreshold

    Во, только что попробовал такой код, предварительно установив все булевы переменные в true, мне все три канала вывелись черными! Комментирую строчки с if, перекомпилирую, каналы по-прежнему чёрные. Беру, копирую код с первого моего поста, вставляю, компилирую - нет только одного канала, первого! Мистика какая-то
  2. проблема с cvThreshold

    Запустил... Разница только в том, что вместо белых полосок теперь черные! В остальном всё то же самое. Вот и я говорю, что всё работало раньше, а потом в один раз как-то всё пропало. Помню, я тогда игрался с тем, что если определённую переменную типа bool не задать, то какие-то операции над определённым каналом не производятся. Кусок кода был вроде такого: ... if(r_enable){ cvAbsDiff(r,r_fon,r_dst); cvThreshold(r_dst,r_dst,50,255,CV_THRESH_BINARY); cvErode(r_dst,r_dst,NULL,1); cvDilate(r_dst,r_dst,NULL,1); cvShowImage("R",r_dst); } if(g_enable){ cvAbsDiff(g,g_fon,g_dst); cvThreshold(g_dst,g_dst,50,255,CV_THRESH_BINARY); cvErode(g_dst,g_dst,NULL,1); cvDilate(g_dst,g_dst,NULL,1); cvShowImage("G",g_dst); } if(b_enable){ cvAbsDiff(b,b_fon,b_dst); cvThreshold(b_dst,b_dst,50,255,CV_THRESH_BINARY); cvErode(b_dst,b_dst,NULL,1); cvDilate(b_dst,b_dst,NULL,1); cvShowImage("B",b_dst); } ...
  3. проблема с cvThreshold

    Хорошо, не вопрос. Изображения очень простые. Само изображение: test2.bmp Фоновое: test2_fon.bmp
  4. проблема с cvThreshold

    Увы, нет! Результат не изменился А у Вас в листинге cvCvtScale без параметров вообще, функция нужна или нет эта? А может такое быть, что мозги слетели либо у OpenCV, либо у VS2008?
  5. проблема с cvThreshold

    Доброе время суток! Возникла такая проблемка, при выполнении следующего кода (вычитание фона из изображения и затем его морфологические преобразования), получаю результат, как на приложенном изображении. Видно, что красный канал в принципе отсутствует. И это вне зависимости от изображений, которых я передаю приложению. Причём, по-началу всё работало нормально (присутствовали только эти дурацкие вертикальные полоски, о которых я скажу чуть похже), потом однажды хоп, и пропал канал. Давай всяко-разно крутить-вертеть... Сейчас получается такая ситуация, что пропадает именно тот канал, к которому первым применяется функция cvThreshold, и именно с параметром CV_THRESH_BINARY или CV_THRESH_BINARY_INV! С остальными параметрам (CV_THRESH_TRUNC, CV_THRESH_TOZERO и т.д.) ничего никуда не пропадает. Посоветуйте, пожалуйста, в какую сторону копать, где сбой происходит, а то я всю голову сломал уже А что касается полосок... У меня они присутствовали сразу, тоже долго с ними боролся, пока случайно не запустил своё приложение на другом компьютере. Там их не оказалось! Подозреваю, что это отзыв к видеокарте или другому какому-нибудь железу. Но если кто-нибудь сталкивался с такой проблемой, буду очень рад услышать советы. Заранее спасибо! Листинг: #include "stdafx.h" #include <cv.h> #include <highgui.h> int main( int argc, char** argv ) { if(argc < 3) return -1; IplImage* in = cvLoadImage(argv[1],CV_LOAD_IMAGE_ANYCOLOR); IplImage* r = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // R channel IplImage* g = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // G channel IplImage* b = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // B channel IplImage* fon = cvLoadImage(argv[2],CV_LOAD_IMAGE_ANYCOLOR); IplImage* r_fon = cvCreateImage(cvGetSize(fon), IPL_DEPTH_8U, 1); // R channel IplImage* g_fon = cvCreateImage(cvGetSize(fon), IPL_DEPTH_8U, 1); // G channel IplImage* b_fon = cvCreateImage(cvGetSize(fon), IPL_DEPTH_8U, 1); // B channel IplImage* r_dst = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // R channel IplImage* g_dst = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // G channel IplImage* b_dst = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1); // B channel cvZero(r); cvZero(g); cvZero(; cvZero(r_fon); cvZero(g_fon); cvZero(b_fon); cvZero(r_dst); cvZero(g_dst); cvZero(b_dst); cvSplit(in, r, g, b, NULL); cvSplit(fon, r_fon, g_fon, b_fon, NULL); cvAbsDiff(g,g_fon,r_dst); cvAbsDiff(g,g_fon,g_dst); cvAbsDiff(b,b_fon,b_dst); cvThreshold(r_dst,r_dst,50,255,CV_THRESH_BINARY); cvThreshold(g_dst,g_dst,50,255,CV_THRESH_BINARY); cvThreshold(b_dst,b_dst,50,255,CV_THRESH_BINARY); cvErode(r_dst,r_dst,NULL,1); cvErode(g_dst,g_dst,NULL,1); cvErode(b_dst,b_dst,NULL,1); cvDilate(r_dst,r_dst,NULL,1); cvDilate(g_dst,g_dst,NULL,1); cvDilate(b_dst,b_dst,NULL,1); cvShowImage("R",r_dst); cvShowImage("G",g_dst); cvShowImage("B",b_dst); cvWaitKey(0); cvReleaseImage(&in); cvReleaseImage(&r); cvReleaseImage(&g); cvReleaseImage(&; cvReleaseImage(&fon); cvReleaseImage(&r_fon); cvReleaseImage(&g_fon); cvReleaseImage(&b_fon); cvReleaseImage(&r_dst); cvReleaseImage(&g_dst); cvReleaseImage(&b_dst); cvDestroyAllWindows(); return 0; }[/code]
  6. Как определить вмятины?

    Здравствуйте! OpenCV знаю очень плохо, потому как прочитал о нём не более пары недель назад. Но так уж случилось, что мне необходимо составить алгоритм, который по фотографии поверхности металла после обработки дробью умел бы определять количество вмятин (окружностей) и их диаметр. Пример фотографии я приложил. Порылся маленько здесь, попробовал использовать метод Хафа, разные алгоритмы, приведенные здесь на форуме, но что-то вероятность определения очень хромает В принципе, мне не нужна 100% вероятность, но хоть бы самые четко видимые вмятины определял - было бы уже хорошо. Подскажите, пожалуйста, в какую сторону копать, в какие функции углубляться. Был бы весьма благодарен хотя бы приблизительному коду для выполнения этой задачи. Сразу скажу, фотография неважного качества, так как сделана на скорую руку. Если это поможет делу, могу сфотографировать на зеркалку. С огромным уважением. Заранее спасибо. obrazec.bmp
×