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

nagoHok

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

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

  • Посещение

  • Days Won

    1

Все публикации пользователя nagoHok

  1. Так если я правильно понял то float x - это позиция пикселя? тогда скажем для конечнего пикселя к примеру 640-го будет произведено 638 итераций?
  2. Добавил сглаживание, не скажу что уж очень сгладилось но больших пиков уже нет int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { cvNamedWindow("Org"); cvNamedWindow("Gray"); IplImage* frame = NULL; frame = cvLoadImage("c:/test.jpg"); IplImage* gray = NULL; gray = cvCreateImage(cvGetSize(frame), 8, 1); cvConvertImage(frame, gray, CV_BGR2GRAY); CvPoint ptLast = cvPoint(0, 0); DWORD dwStart = GetTickCount(); int nLastYPos = 0; for (int nY = 0; nY < gray->height; nY+=10) { ptLast = cvPoint(0, nY); for (int nX = 2; nX < gray->widthStep - 2; nX++) { int nAv = 0; for (int nPos = -2; nPos < 3; nPos++) { nAv += gray->imageData[nY * gray->widthStep + nX + nPos]; } nAv = abs(nAv); nAv /= 50; //int nBr1 = gray->imageData[nY * gray->widthStep + nX + 1] / 10; //nBr = abs(nBr1 - nBr); cvLine(frame, ptLast, cvPoint(nX, nY - nAv) , cvScalar(0), 1); ptLast = cvPoint(nX, nY - nAv); } } dwStart = GetTickCount() - dwStart; std::cout << dwStart; cvShowImage("Gray", gray); cvShowImage("Org", frame); cvReleaseImage(&gray); cvReleaseImage(&frame); gray = NULL; frame = NULL; char c = cvWaitKey(0); if (c == 27) { return 0; } return 0; }
  3. оп, необновил страничку помоему Smorodov как раз на это ссылку дал.
  4. А подойдет ли следующие сглаживание: к примеру беру пять точек и высчитываю среднее значение между ними? т.е. -2 -1 0 1 2, и ставлю полученнное значение на место 0-го элемента?
  5. Спасибо, буду изучать вопрос.
  6. Итак перерыв форум, наткнулся на ссылочку http://www.inf.tsu.ru/library/DiplomaWorks/CompScience/2006/busigin/diplom.pdf Очень понравился алгоритм про сканирование изображения в горизонтальном сечении и построения графика амплитуды яркости от координат. Единственное на чем встал это на предложеной функции в разделе 3,3 на 21 странице, ни как не получается получить похожий график, к томуже далее предлагается получить производные от этой функции, но так как вуз мною закончен более 10 лет назад, вся основа вышки благополучно забыта. Если кто силен в математике, подскажите что делать. Спасибо за рание. int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { cvNamedWindow("Org"); cvNamedWindow("Gray"); IplImage* frame = NULL; frame = cvLoadImage("c:/O807MK177.jpg"); IplImage* gray = NULL; gray = cvCreateImage(cvGetSize(frame), 8, 1); cvConvertImage(frame, gray, CV_BGR2GRAY); CvPoint ptLast = cvPoint(0, 0); DWORD dwStart = GetTickCount(); int nLastYPos = 0; for (int nY = 0; nY < gray->height; nY+=10) { ptLast = cvPoint(0, nY); for (int nX = 0; nX < gray->widthStep - 2; nX++) { int nBr = gray->imageData[nY * gray->widthStep + nX] / 10; int nBr1 = gray->imageData[nY * gray->widthStep + nX + 1] / 10; nBr = abs(nBr1 - nBr); cvLine(frame, ptLast, cvPoint(nX, nY - nBr) , cvScalar(0), 1); ptLast = cvPoint(nX, nY - nBr); } } dwStart = GetTickCount() - dwStart; std::cout << dwStart; cvShowImage("Gray", gray); cvShowImage("Org", frame); cvReleaseImage(&gray); cvReleaseImage(&frame); gray = NULL; frame = NULL; char c = cvWaitKey(0); if (c == 27) { return 0; } return 0; }
  7. спасибо но не помогло )
  8. как ни странно но после свертки все равно белый квадрат double arKernel[9] = {0.1111, -0.8889, 0.1111, -0.8889, 4.1111, -0.8889, 0.1111, -0.8889, 0.1111}; CvMat mat = cvMat(3, 3, CV_8UC1, &arKernel); cvFilter2D(src, dst, &mat, cvPoint(-1,-1));
  9. т.е. суммировать свернутое и исходное изображение всетаки надо?
  10. Опа, действительно мой косяк на счет размерности. Просто понял фразу то что надо просуммировать исходное изображение с фильтрованным. Т.е. наложить данный фильтр это и есть увеличение резкости или же как говорит Smorodov не все так просто в этом вопросе?
  11. Как ни странно но результат это белый квадрат.
  12. я правильно понимаю что сначало мы делаем свертку с маской 0.1111 -0.8889 0.1111 -0.8889 4.1111 -0.8889 0.1111 -0.8889 0.1111 затем полученный результат суммируем с исходным изображением? double arKernel[25] = {0.1111, -0.8889, 0.1111, -0.8889, 4.1111, -0.8889, 0.1111, -0.8889, 0.1111}; CvMat mat = cvMat(3, 3, CV_8UC1, arKernel); cvFilter2D(src, dst, &mat, cvPoint(-1,-1)); cvAdd(src, dst, dst);
  13. А можно по конкретнее как увеличить резкость?
  14. Очень заинтересовался проектом, точнее вплотную принялся за подобную разработку. Код выложенный anton - м действительно очень тормозной, и не всегда коректно находит прямоугольники. Утечка памяти изза того что не чистит MemStorage. Перерыл море инфы на ткнулся вот на подобный алгоритм http://cms.tusur.ru/filearchive/reports-magazine/2008-2-1/34-39.pdf заключается он в разбиение изображения на блоки и составления карты контрастности Кто что может сказать про данный метод?
  15. а возможно ли отсканировать 9 главу? Глава 9. Методы выделения и распознавания номерных знаков.
  16. opencv 2.2

    кто может описать процесс установки для 2008 студии? Если кто ставил будьте добры, а то реально самому разбираться времени просто нету( Благодарю за рание!
  17. Всем привет! Незнаю с чего начать, Каким образом, точнее какими алгоритмы в библиотеке лучше пользоваться для локализации штрих-кода? Спасибо за рание.
  18. Совсем забыл вот обещанный проект, на 2008 студии. BCode.rar
  19. Реализовал при помощи openCv и обычными средствами без применения каких либо библиотек, если кому интересно могу выложить проект
  20. cvCvtColor

    Аналогичная ситуацию, всегда падает на cvCvtColor(pImage, pGray, CV_BGR2GRAY); Счем это может быть связанно?
  21. Огромное спасибо!
  22. cvLoadImage возращает NULL

    Всем добрый день! Только что скачал OpenCV 2.1 и приступил к изучению. и сразу непонятные ситуация, взял из инета пример для пробы изменив в нем название изображение и при загрузке изображение cvLoadImage возращает 0, пробовал другие форматы работает. В чем может быть проблема? TIFF задекларирован как подерживаемый формат. Спасибо за рание. ЗЫ среда MSVS 2008. #include <cv.h> #include <highgui.h> #include <stdlib.h> #include <stdio.h> IplImage* image = 0; IplImage* src = 0; int main(int argc, char* argv[]) { // имя картинки задаётся первым параметром CStringA strPathName("c:\\Doc.tif"); // получаем картинку image = cvLoadImage(strPathName,1); //Возращает NULL // клонируем картинку src = cvCloneImage(image); printf("[i] image: %s\n", filename); assert( src != 0 ); // окно для отображения картинки cvNamedWindow("original",CV_WINDOW_AUTOSIZE); // показываем картинку cvShowImage("original",image); // выводим в консоль информацию о картинке printf( "[i] channels: %d\n", image->nChannels ); printf( "[i] pixel depth: %d bits\n", image->depth ); printf( "[i] width: %d pixels\n", image->width ); printf( "[i] height: %d pixels\n", image->height ); printf( "[i] image size: %d bytes\n", image->imageSize ); printf( "[i] width step: %d bytes\n", image->widthStep ); // ждём нажатия клавиши cvWaitKey(0); // освобождаем ресурсы cvReleaseImage(&image); cvReleaseImage(&src); // удаляем окно cvDestroyWindow("original"); return 0; }
  23. cvLoadImage возращает NULL

    Может кому то и пригодиться __forceinline int GetBit(const BYTE &btByte, const UINT &nBit) { BYTE btMask = 1 << nBit; BYTE btR = btMask & btByte; if(btR) return 1; return 0; } IplImage* LoadImage(const CString& strPathName) { Bitmap* pBitmap = NULL; IplImage* pImage = NULL; pBitmap = new Bitmap(strPathName); if(!pBitmap) return NULL; if(pBitmap->GetLastStatus() != Ok) { delete pBitmap; return NULL; } if(pBitmap->GetPixelFormat() != PixelFormat1bppIndexed) { delete pBitmap; CStringA strPathNameA(strPathName); pImage = cvLoadImage(strPathNameA); return pImage; } BitmapData *pSrcData = new BitmapData; SecureZeroMemory(pSrcData, sizeof(BitmapData)); if(pBitmap->LockBits(&Rect(0,0, pBitmap->GetWidth(), pBitmap->GetHeight()), ImageLockModeRead , pBitmap->GetPixelFormat(), pSrcData) != Ok) { delete pBitmap; delete pSrcData; return NULL; } pImage = cvCreateImage(cvSize(pSrcData->Width, pSrcData->Height), IPL_DEPTH_8U, 1); if(!pImage) { delete pBitmap; delete pSrcData; return NULL; } int nSize = 0; int nStride = abs(pSrcData->Stride); BYTE* pSrcPixels = (BYTE*)pSrcData->Scan0; for (UINT nY = 0; nY < pSrcData->Height; nY++) { int nOffset = 0; for (int nX = 0; nX < nStride; nX++) { BYTE bt8Bit = pSrcPixels[nX + nY * nStride]; for (int nBit = 7; nBit > -1; nBit--) { nSize = nX + nY * pImage->widthStep + nOffset; if(nSize > pImage->imageSize) break; int nBW = 0; if(GetBit(bt8Bit, nBit)) nBW = 255; pImage->imageData[nSize] = nBW; nOffset++; } nOffset--; } } delete pBitmap; delete pSrcData; return pImage; }
  24. cvLoadImage возращает NULL

    Спасибо буду пробовать!
×