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

astrgan

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

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

  • Посещение

  • Days Won

    2

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

  1. С помощью этого кода хочу подготовить картинки для обучения нейросети. #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <vector> #include <iostream> #include <sstream> int main() { std::vector<cv::Vec3f> vecCircles; std::vector<cv::Vec3f>::iterator itrCircles; cv::VideoCapture capWebcam; cv::Mat matOriginal,matProcessed; int name = 0; std::string path = "/home/alex/development/"; std::vector<int> compression_params; //vector that stores the compression parameters of the image compression_params.push_back(CV_IMWRITE_JPEG_QUALITY); //specify the compression technique compression_params.push_back(98); //specify the compression quality capWebcam.open(0); while(1){ capWebcam.read(matOriginal); cv::inRange(matOriginal, cv::Scalar(0,0,175), cv::Scalar(100,100,256),matProcessed); cv::HoughCircles(matProcessed, vecCircles, CV_HOUGH_GRADIENT, 2, matProcessed.rows / 4,100,50,10,400); for (itrCircles = vecCircles.begin(); itrCircles != vecCircles.end(); itrCircles++){ int x = (int)(*itrCircles)[0]; int y = (int)(*itrCircles)[1]; int w = 2*(int)(*itrCircles)[2]; int h = 2*(int)(*itrCircles)[2]; cv::Rect rect(x-w/2,y-h/2,w,h); cv::rectangle(matProcessed, rect, cv::Scalar(0,0,255), 3); cv::rectangle(matOriginal, rect, cv::Scalar(0,0,255), 3); std::ostringstream out; out<<path<<name<<".jpg"; cv::imwrite(out.str(), cv::Mat(matOriginal,rect),compression_params); std::cout<<"save: "<< out.str() <<std::endl; name++; } cv::imshow("matProcessed",matProcessed); cv::imshow("matOriginal",matOriginal); cv::waitKey(35); } } Но бывает вылетает это
  2. нейроные сети в OpenCV

    Здравствуйте. Подскажите какой-нибудь пример с использованием нейронных сетей из библиотеки OpenCV.
  3. нейроные сети в OpenCV

    Smorodov Спасибо большое)
  4. нейроные сети в OpenCV

    Что-то не могу до конца разобраться. Может кто-нибудь покажет как например в opencv создать сеть решающею XOR?
  5. нейроные сети в OpenCV

    Если использовать нейросеть для распознавания изображений (с предварительной обработкой на OpenCV), то какой библиотекой лучше пользоваться? OpenCV или какой-нибудь другой?
  6. OpenCV и Qt

    Если использовать OpenCV совместно с Qt, то без подобного преобразования не обойтись? QImage mat2qimage(const cv::Mat& mat) { cv::Mat rgb; cv::cvtColor(mat, rgb, CV_BGR2RGB); return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888); }; P.S. не нравится что приходится применять cvtColor(mat, rgb, CV_BGR2RGB), кажется что на ровном месте производительность буду терять.
  7. Здравствуйте Запустил пример который идет вместе с библиотекой Object Detection. Ищет лица, глаза и обводит их синим кругом. Вообщем все нечего и даже работает, вот только какой-то он тормознутый, видео отстает где-то на 2 сек. Это так и должно быть? Каскады на androide вроде быстрее работают, может рисование кругов замедляет его работу?
  8. Хмм. В примерах которые идут с библиотекой OpenCV есть два исходника которые демонстрируют работу каскада Хаара (находятся и обводятся в круг глаза и лицо). Это objectDetection2.cpp и objectDetection.cpp. Пример objectDetection.cpp безбожно тормозит, а objectDetection2.cpp летает. Я почему-то всегда запускал objectDetection.cpp и мучился)
  9. Что-то ссылка не открывается(
  10. Делал с помощью eclipse (в Ubuntu)там вроде такого нет. p.s. проверю позже на MS VS.
  11. Без манипуляций на много лучше. Можно сказать не тормозит.
  12. Здравствуйте. Пытаюсь обучить каскад с помощью программы opencv_traincascade.exe, но она выдает ошибку) Parameters can not be written, because file haarcascade/params.xml can not be opened. Никак не могу понять в чем дело. Запускаю вот так: opencv_traincascade.exe -data haarcascade -vec samples.vec -bg Bad.dat -numStages 16 -minhitrate 0.999 -maxFalseAlarmRate 0.4 -numPos 200 -numNeg 500 -w 20 -h 20 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024
  13. проблема решилась
  14. Здравствуйте. Как перевести roi в серые полутона(android)? Пробовал так, но не получается. public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat image = inputFrame.rgba(); Rect roi = new Rect(300, 50, 50, 10); Mat sub =image.submat(roi); Imgproc.cvtColor(sub, sub, Imgproc.COLOR_RGBA2GRAY); sub.copyTo(image.submat(roi)); return image; } и так: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat image = inputFrame.rgba(); Rect roi = new Rect(300, 50, 50, 10); Imgproc.cvtColor(image.submat(roi), image.submat(roi), Imgproc.COLOR_RGBA2GRAY); return image; } P.S. самое обидное это то что раньше я знал как это делать(
  15. Получилось сделать так: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat rgbaInnerWindow; Mat mIntermediateMat= new Mat(); Mat rgba = inputFrame.rgba(); Size sizeRgba = rgba.size(); int rows = (int) sizeRgba.height; int cols = (int) sizeRgba.width; int left = cols / 8; int top = rows / 8; int width = cols * 3 / 4; int height = rows * 3 / 4; rgbaInnerWindow = rgba.submat(top, top + height, left, left + width); Imgproc.cvtColor(rgbaInnerWindow, mIntermediateMat, Imgproc.COLOR_RGBA2GRAY); Imgproc.cvtColor(mIntermediateMat, rgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA); rgbaInnerWindow.release(); return rgba; } Но вроде раньше получалось сделать это как-то по проще (меньше строк) в вер 4.2.3, хотя может просто я ошибаюсь и делал также.
  16. Canny сделать получилось (собственно я его скопировал) Mat rgbaInnerWindow; Mat mIntermediateMat= new Mat(); Mat rgba = inputFrame.rgba(); Size sizeRgba = rgba.size(); int rows = (int) sizeRgba.height; int cols = (int) sizeRgba.width; int left = cols / 8; int top = rows / 8; int width = cols * 3 / 4; int height = rows * 3 / 4; rgbaInnerWindow = rgba.submat(top, top + height, left, left + width); Imgproc.Canny(rgbaInnerWindow, mIntermediateMat, 80, 90); Imgproc.cvtColor(mIntermediateMat, rgbaInnerWindow, Imgproc.COLOR_GRAY2BGRA, 4); rgbaInnerWindow.release(); return rgba; А вот чернобелое неработает, не могу понять почему Mat rgbaInnerWindow; Mat mIntermediateMat= new Mat(); Mat rgba = inputFrame.rgba(); Size sizeRgba = rgba.size(); int rows = (int) sizeRgba.height; int cols = (int) sizeRgba.width; int left = cols / 8; int top = rows / 8; int width = cols * 3 / 4; int height = rows * 3 / 4; rgbaInnerWindow = rgba.submat(top, top + height, left, left + width); Imgproc.cvtColor(rgbaInnerWindow, rgbaInnerWindow, Imgproc.COLOR_RGBA2GRAY, 1); rgbaInnerWindow.release(); return rgba;
  17. Спасибо! Появился еще вопрос: rgbaInnerWindow.release() - это команда удаляет изображение из памяти?
  18. Целесообразно обрабатывать изображение вейвлет преобразованием перед подачей его на вход нейросети. Чтобынс было легче классифицировать изображения. Типа с помощью вейвлет преобразования находить признаки.
  19. Android openCV samle

    Подскажите пожалуйста. Как я понимаю программа начинается с метода . mOpenCvCameraView.setCvCameraViewListener(this); это установка "слушителя" который будет следить за изменением чего-то. Если так, то где обработчик. В общем если не трудно объясните в каком порядке будут вызывается методы или хотя бы что будет работать после метода onCreate. public class Tutorial1Activity extends Activity implements CvCameraViewListener2 { private static final String TAG = "OCVSample::Activity"; private CameraBridgeViewBase mOpenCvCameraView; private boolean mIsJavaCamera = true; private MenuItem mItemSwitchCamera = null; private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { Log.i(TAG, "OpenCV loaded successfully"); mOpenCvCameraView.enableView(); } break; default: { super.onManagerConnected(status); } break; } } }; public Tutorial1Activity() { Log.i(TAG, "Instantiated new " + this.getClass()); } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { Log.i(TAG, "called onCreate"); super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); setContentView(R.layout.tutorial1_surface_view); if (mIsJavaCamera) mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); else mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view); mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); } @Override public void onPause() { super.onPause(); if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); } @Override public void onResume() { super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback); } public void onDestroy() { super.onDestroy(); if (mOpenCvCameraView != null) mOpenCvCameraView.disableView(); } @Override public boolean onCreateOptionsMenu(Menu menu) { Log.i(TAG, "called onCreateOptionsMenu"); mItemSwitchCamera = menu.add("Toggle Native/Java camera"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { String toastMesage = new String(); Log.i(TAG, "called onOptionsItemSelected; selected item: " + item); if (item == mItemSwitchCamera) { mOpenCvCameraView.setVisibility(SurfaceView.GONE); mIsJavaCamera = !mIsJavaCamera; if (mIsJavaCamera) { mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_java_surface_view); toastMesage = "Java Camera"; } else { mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.tutorial1_activity_native_surface_view); toastMesage = "Native Camera"; } mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE); mOpenCvCameraView.setCvCameraViewListener(this); mOpenCvCameraView.enableView(); Toast toast = Toast.makeText(this, toastMesage, Toast.LENGTH_LONG); toast.show(); } return true; } public void onCameraViewStarted(int width, int height) { } public void onCameraViewStopped() { } public Mat onCameraFrame(CvCameraViewFrame inputFrame) { return inputFrame.rgba(); } }
  20. Android openCV samle

    А как получить доступ к самому массиву с изображениям? Вот здесьвроде описано, но актуально ли?
  21. Android openCV samle

    А поверхность вывода прописана в xml? Что и где мне надо подправить если я хочу выводить на экран не все картинку, а только некоторую ее часть (например 1/3 от размера оригинала).
  22. Android openCV samle

    А вообще если я хочу скопировать некую прямоугольную часть изображения в др. экземпляр класса mat, то такой код верен? Rect roi = new Rect(300, 50, 50, 10); imageRIO = image.submat(roi); или так: Rect roi = new Rect(300, 50, 50, 10); imageRIO.copyTo(image.submat(roi));
  23. Android openCV samle

    Пробовал еще так: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Rect roi = new Rect(300, 50, 50, 10); Mat roiM = new Mat (inputFrame.gray(),roi); return roiM; }
  24. Android openCV samle

    Хочу обрезать изображение и вывести его на экран. Пытаюсь сделать так: public Mat onCameraFrame(CvCameraViewFrame inputFrame) { Mat roiM = inputFrame.gray(); Rect roi = new Rect(300, 50, 50, 10); return roiM.submat(roi); } но приложение не работает( Подскажите пожалуйста как сделать правильно. P.S. переделываю стандартный пример "tutorial-1-camerapreview"
  25. Android openCV samle

    P.S. Большое спасибо!)
×