nagoHok
Пользователи-
Количество публикаций
54 -
Зарегистрирован
-
Посещение
-
Days Won
1
Все публикации пользователя nagoHok
-
Так если я правильно понял то float x - это позиция пикселя? тогда скажем для конечнего пикселя к примеру 640-го будет произведено 638 итераций?
-
Спасибо большое!
-
Добавил сглаживание, не скажу что уж очень сгладилось но больших пиков уже нет 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; }
-
оп, необновил страничку помоему Smorodov как раз на это ссылку дал.
-
А подойдет ли следующие сглаживание: к примеру беру пять точек и высчитываю среднее значение между ними? т.е. -2 -1 0 1 2, и ставлю полученнное значение на место 0-го элемента?
-
Спасибо, буду изучать вопрос.
-
Итак перерыв форум, наткнулся на ссылочку 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; }
-
спасибо но не помогло )
-
как ни странно но после свертки все равно белый квадрат 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));
-
т.е. суммировать свернутое и исходное изображение всетаки надо?
-
Опа, действительно мой косяк на счет размерности. Просто понял фразу то что надо просуммировать исходное изображение с фильтрованным. Т.е. наложить данный фильтр это и есть увеличение резкости или же как говорит Smorodov не все так просто в этом вопросе?
-
Как ни странно но результат это белый квадрат.
-
я правильно понимаю что сначало мы делаем свертку с маской 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);
-
А можно по конкретнее как увеличить резкость?
-
Очень заинтересовался проектом, точнее вплотную принялся за подобную разработку. Код выложенный anton - м действительно очень тормозной, и не всегда коректно находит прямоугольники. Утечка памяти изза того что не чистит MemStorage. Перерыл море инфы на ткнулся вот на подобный алгоритм http://cms.tusur.ru/filearchive/reports-magazine/2008-2-1/34-39.pdf заключается он в разбиение изображения на блоки и составления карты контрастности Кто что может сказать про данный метод?
-
а возможно ли отсканировать 9 главу? Глава 9. Методы выделения и распознавания номерных знаков.
-
кто может описать процесс установки для 2008 студии? Если кто ставил будьте добры, а то реально самому разбираться времени просто нету( Благодарю за рание!
-
Всем привет! Незнаю с чего начать, Каким образом, точнее какими алгоритмы в библиотеке лучше пользоваться для локализации штрих-кода? Спасибо за рание.
-
Совсем забыл вот обещанный проект, на 2008 студии. BCode.rar
-
Реализовал при помощи openCv и обычными средствами без применения каких либо библиотек, если кому интересно могу выложить проект
-
Аналогичная ситуацию, всегда падает на cvCvtColor(pImage, pGray, CV_BGR2GRAY); Счем это может быть связанно?
-
Огромное спасибо!
-
Всем добрый день! Только что скачал 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; }
-
Может кому то и пригодиться __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; }
-
Спасибо буду пробовать!