Chemist 0 Жалоба Опубликовано June 11, 2013 Без cvReleaseImage программа через некоторое время вылетает, но вся проблема в том что после прописания вот этой строчки -cvReleaseImage( &ImageRGB);, компилятор ругается - error C2664: cvReleaseImage: невозможно преобразовать параметр 1 из 'cli::interior_ptr<Type>' в 'IplImage **' Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 11, 2013 забыл добавить: пишу в VS C++ 2008 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 12, 2013 По аналогии с тем что здесь: http://stackoverflow.com/questions/11583851/cannot-convert-parameter-1-from-cliinterior-ptrtype-to-cvcapture pin_ptr<IplImage *> p; p = &ImageRGB; cvReleaseCapture( p ); [/code] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 12, 2013 Спасибо, с этим вроде разобрался, но теперь возникает другое исключение. В ходе работы вот в этой строчке: imageRGB = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3 ); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 12, 2013 Вроде то же разобрался, перенес за цикл. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mrgloom 242 Жалоба Опубликовано June 13, 2013 используйте опенцвэшный умный указатель Ptr<> память будет сама очищаться. Ptr<IplImage> src= cvLoadImage("1.tif"); src.release(); // если надо очистить память явно Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 13, 2013 Да бы не городить новую тему, спрошу сдесь. Перевожу в в монохромное с выделением нужного цвета вот таким образом: IplImage* TreatmentImage::YellowInBlackAndWhite(IplImage* rgb ,int B, int G, int R){ int x, y; ptr = (uchar*)(rgb->imageData); for(x = 0; x<rgb->width-1; x++){ //преобразуем изображение с желтыми метками в монохромное for (y = 0; y<rgb->height-1; y++){ if ((ptr[3*x+y*rgb->widthStep] < && (ptr[3*x+1+y*rgb->widthStep] > G) && (ptr[3*x+2+y*rgb->widthStep] > R)) { ptr[3*x+y*rgb->widthStep] = 255; //H ptr[3*x+1+y*rgb->widthStep] = 255; //S ptr[3*x+2+y*rgb->widthStep] = 255; //V } else { ptr[3*x+y*rgb->widthStep] = 0; ptr[3*x+1+y*rgb->widthStep] = 0; ptr[3*x+2+y*rgb->widthStep] = 0; } } } return rgb; }[/code] прохо выделяется искомый цвет, и очень большое влияние оказывает внешнее освещение. Подскажите как тут быть, менять камеру (на подобии Logitech Webcam C600) или городить подсветку? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 13, 2013 Изображение лучше перевести в HSV и работать с компонентой Hue ее значение должно быть для желтого в районе 60 и Saturation, ее значение задать больше некоторого порога (30 например), иначе будет и белый цвет выделять. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 13, 2013 значит камера и подсветка сдесь особо не причем? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 18, 2013 Перевел изображение в HSV, но перед выводом его в image оно не складывается private: System::Void MainForm_Shown(System::Object^ sender, System::EventArgs^ e) { //Cam->capture = cvCreateCameraCapture(CV_CAP_ANY); capture = cvCreateCameraCapture(CV_CAP_ANY); if (capture != 0) { //проверяем наличие подключенных камер this->label4->Visible = false; //скрываем надписьCybSys... SettingForm->label7->Text = "Видеокамера включена!"; frame = cvQueryFrame( capture ); imageRGB = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3 ); hsv = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3 ); h_plane = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); s_plane = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); v_plane = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); h_range = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); s_range = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); v_range = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); hsv_and = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); // конвертируем в HSV cvCvtColor( frame, hsv, CV_BGR2HSV ); // разбиваем на отельные каналы cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); if (OpenFileColor(R, G, == -1) { System::Windows::Forms::MessageBox::Show("Данные не были Прочитаны из файла!", "Ошибка чтения");} else { this->timer1->Start(); //запускаем таймер } } else { SettingForm->label7->Text = "Видеокамера не подключена!"; } } private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) { myTrackbarHmin(SettingForm->hScrollBar1->Value); myTrackbarHmax(SettingForm->hScrollBar2->Value); myTrackbarHmin(SettingForm->hScrollBar3->Value); myTrackbarHmax(SettingForm->hScrollBar4->Value); myTrackbarHmin(SettingForm->hScrollBar5->Value); myTrackbarHmax(SettingForm->hScrollBar6->Value); //получаем кадр frame = cvQueryFrame( capture ); // конвертируем в HSV cvCvtColor( frame, hsv, CV_BGR2HSV ); // разбиваем на отельные каналы cvCvtPixToPlane( hsv, h_plane, s_plane, v_plane, 0 ); cvAnd(h_range, s_range, hsv_and); cvAnd(hsv_and, v_range, hsv_and); Bitmap^ bmpSetting = (gcnew System::Drawing::Bitmap(hsv_and->width, hsv_and->height, hsv_and->widthStep, System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)hsv_and->imageData)); SettingForm->pictureBox1->Image = bmpSetting;}[/code] п.с. на подписи скрол баров прошу внимания не обращать ) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано June 18, 2013 hsv_and = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 1 ); // 1 канал (8 бит на точку) Bitmap^ bmpSetting = (gcnew System::Drawing::Bitmap(hsv_and->width, hsv_and->height, hsv_and->widthStep,System::Drawing::Imaging::PixelFormat::Format24bppRgb,(System::IntPtr)hsv_and->imageData)); // 3 канала (24 бит на точку) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 18, 2013 спасибо, за наводку но какой формат выбрать все перебрал (http://msdn.microsoft.com/ru-ru/library/system.drawing.imaging.pixelformat.aspx) подходит только Format8bppIndexed, но изображение вместо белого отдает в краснину Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chemist 0 Жалоба Опубликовано June 18, 2013 спасибо! ) как всегда невнимателен - нашел ошибку )))) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах