[참고]

https://wiki.ubuntu-kr.org/index.php/GUI(QT)_Programming#.EC.BB.A8.ED.8A.B8.EB.A1.A4

'#C&C++ #영상비전#Qt' 카테고리의 다른 글

#opencv 2.4.13 설치하기(c/c++)  (0) 2018.09.05
#Qt Creator #QCamera 예제  (0) 2018.08.28
#Qt #Qt 개발자 커뮤니티  (0) 2018.08.28
#Qt버전 확인 #qt 설치 #qmake  (0) 2018.08.24
#Qt #QVision환경설정  (0) 2018.08.24

https://gist.github.com/KhaledSMQ/081a6fffca92d50ab8b634d1b5b795ae[참고]

http://webnautes.tistory.com/1030



[설치버전 확인하기]

$pkg-config --modversion opencv


[기존 설치된 패키지 업그레이드]

$sudo apt-get update

$sudo apt-get upgrade


[OpenCV 컴파일 전 패키지 설치]

$sudo apt-get install build-essential cmake   

$sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

$sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev

$sudo apt-get install libv4l-dev v4l-utils

$sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

$sudo apt-get install libqt4-dev

$sudo apt-get install mesa-utils libgl1-mesa-dri libqt4-opengl-dev

$sudo apt-get install libatlas-base-dev gfortran libeigen3-dev

$sudo apt-get install python2.7-dev python3-dev python-numpy python3-numpy


[OpenCV 버전 다운로드]

https://opencv.org/releases.html


[build 폴더 만들고 cmake 실행]


$

$cmake -D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local \

-D WITH_TBB=OFF \

-D WITH_IPP=OFF \

-D WITH_1394=OFF \

-D BUILD_WITH_DEBUG_INFO=OFF \

-D BUILD_DOCS=OFF \

-D INSTALL_C_EXAMPLES=ON \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=OFF \

-D BUILD_TESTS=OFF \

-D BUILD_PERF_TESTS=OFF \

-D WITH_QT=ON \

-D WITH_OPENGL=ON \

-D OPENCV_EXTRA_MODULES_PATH= ../../opencv_contrib-3.4.0/modules \

-D WITH_V4L=ON  \

-D WITH_FFMPEG=ON \

-D WITH_XINE=ON \

-D BUILD_NEW_PYTHON_SUPPORT=ON \

../


(결과) 실패

1. openCV 2.4.13을 설치하려고 진행 했으나 제대로 설치가 안 됨. 참고 블로그는 openCV 3.3 (ubuntu 16.04)를 설치하는 과정을 담음.



[참고]

https://gist.github.com/KhaledSMQ/081a6fffca92d50ab8b634d1b5b795ae


[패키지 설치]

$sudo apt-get update

$sudo apt-get install -y build-essential

$sudo apt-get install -y cmake

$sudo apt-get install -y libgtk2.0-dev

$sudo apt-get install -y pkg-config

$sudo apt-get install -y python-numpy python-dev

$sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev

$sudo apt-get install -y libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev


$sudo apt-get -qq install libopencv-dev checkinstall yasm libdc1394-22-dev libxine2 libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils


[OpenCV 버전 다운로드 -> build 폴더 만들기 -> cmake 실행]

$cmake -G "Unix Makefiles" 

-D CMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc  \

-D CMAKE_BUILD_TYPE=RELEASE \

-D CMAKE_INSTALL_PREFIX=/usr/local  \

-D WITH_TBB=ON  \

-D BUILD_NEW_PYTHON_SUPPORT=ON \

-D WITH_V4L=ON \

-D INSTALL_C_EXAMPLES=ON \

-D INSTALL_PYTHON_EXAMPLES=ON \

-D BUILD_EXAMPLES=ON \

-D WITH_QT=ON \

-D WITH_OPENGL=ON \

-D BUILD_FAT_JAVA_LIB=ON \

-D INSTALL_TO_MANGLED_PATHS=ON \

-D INSTALL_CREATE_DISTRIB=ON \

-D INSTALL_TESTS=ON \

-D ENABLE_FAST_MATH=ON  \

-D WITH_IMAGEIO=ON \

-D BUILD_SHARED_LIBS=OFF \

-D WITH_GSTREAMER=ON \

.. \


[사용중인 컴퓨터 CPU 코어 수 확인]
$cat /proc/cpuinfo | grep processor | wc -l


$make all -j2 #2 = 코어 수

(설치 진행..)

(결과) 성공!

1. 설치 100% 가다니 감개 무량. 그런데 파이썬2에서 import cv2가 안 됨. 왜 그런지? ㅠㅠ

2. openCV 2.4.13을 설치 했는데 2.4.9.1이 뜨는 이유는? 에라 모르겠다~

'#C&C++ #영상비전#Qt' 카테고리의 다른 글

#qt 학습 사이트  (0) 2018.09.13
#Qt Creator #QCamera 예제  (0) 2018.08.28
#Qt #Qt 개발자 커뮤니티  (0) 2018.08.28
#Qt버전 확인 #qt 설치 #qmake  (0) 2018.08.24
#Qt #QVision환경설정  (0) 2018.08.24

[참고]

Tutorial Qt Creator - QCamera(WebCam en C++)

https://www.youtube.com/watch?v=9oQZPqi47Y8


$ sudo apt-get update

$ sudo apt-get install qtmultimedia5-dev        // 우분투 16.04에 설치하기(QCamera 모듈 불러오려면 설치 필요)


(Qt5에서 실행)

1. Welcome - Project - New Project - Application - Qt Widgets Application 

2. Name : CameraTest - 작업폴더 지정 - Next

3. Kit Selection(데스크탑 or 임베디드 or 기타 ) 선택하기(동시선택 가능) - Next

4. Details - Class Information - Base class: - QWidget 선택 - Next - Finish

5. code 작성


"CameraTest.pro"


QT += core gui multimedia multimediawidgets    // 멀티미디어 모듈을 모듈화


(...생략...)                                                     // 자동생성


QMAKE_CXXFLAGS += -std=gnu++14              // 표준 2014 추가


"widget.h"


(...생략...)                                                    //자동생성


class QCamera;

class QCameraViewfinder;

class QCameraImageCaputre;

class QVBoxLayout;


class Widget : public Qwidget

{

Q_OBJECT


public:

explicit Widget(QWidget *parent = nullptr); // 0을 nullptr로 변경

~Widget();

private:

Ui::Widget *ui;

QCamera *mCamera;

QCameraViewfinder *mCameraViewfinder;

QCameraImageCapture *mCameraImageCaputre;

QVBoxLayout *mLayout;

};


#endif



"widget.cpp"


#include "widget.h"

#include "ui_widget.h"

#include <QCamera>

#include <QCameraViewfinder>

#include <QCameraImageCapture>

#include <QVBoxLayout>


Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

mCamera = new QCamera(this);

mCameraViewfinder = new QCameraViewfinder(this);

mCameraImageCaputre = new QCameraImageCapture(mCamera, this);

mLayout = new QVBoxLayout;


mLayout ->addItem(mCameraViewfinder);

}


Widget::~Widget()

{

delete ui;

}


"widget.ui" (Design 영역. 코딩이 아닌 Drag&Drop으로 UI 만들기)

전 Object Name : optionPushButton 으로 함




"widget.h"


(...생략...)                                                    //자동생성


class QCamera;

class QCameraViewfinder;

class QCameraImageCaputre;

class QVBoxLayout;

class QMenu;

class QAction;


class Widget : public Qwidget

{

Q_OBJECT


public:

explicit Widget(QWidget *parent = nullptr); // 0을 nullptr로 변경

~Widget();

private:

Ui::Widget *ui;

QCamera *mCamera;

QCameraViewfinder *mCameraViewfinder;

QCameraImageCapture *mCameraImageCaputre;

QVBoxLayout *mLayout;

QMenu *mOpcionesMenu;

QAction *mEncenderAction;

QAction *mApagarAction;

QAction *mCapturarAction;

};


#endif


"widget.cpp"


#include "widget.h"

#include "ui_widget.h"

#include <QCamera>

#include <QCameraViewfinder>

#include <QCameraImageCapture>

#include <QVBoxLayout>

#include <QMenu>

#include <QAction>


Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

mCamera = new QCamera(this);

mCameraViewfinder = new QCameraViewfinder(this);

mCameraImageCaputre = new QCameraImageCapture(mCamera, this);

mLayout = new QVBoxLayout;

mOpcionesMenu = new QMenu("Option", this);

mEncenderAction = new QAction("Encender", this);

mApagarAction = new QAction("Apagar", this);

mCapturarAction = new QAction("Capturar", this);


mOptionMenu->addAction({mEncenderAction, mApagarAction, mCapturarAction});


ui->optionPushButton->setMenu(mOptionMenu);

mCamera->setViewfinder(mCameraViewfinder);

mLayout->addWidget(mCameraViewfinder);   //Item을 Widget으로 수정

mLayout->setMargin(0);

ui->scrollArea->setLayout(mLayout);


connect(mEncenderAction, &QAction::triggered, [&](){

mCamera->start();

});


connect(mAagarAction, &QAction::triggered, [&](){

mCamera->stop();

});


connect(mCapturarAction, &QAction::triggered, [&](){


});

}


Widget::~Widget()

{

delete ui;

}


"main.cpp"


#include "widget.h"

#include <QApplication>


int main(int argc, char *argv[])

{

QApplication a(argc, argv);

a.setStyple("fusion")

Widget w;

w.show();


return a.exec();

}


"widget.cpp"


#include "widget.h"

#include "ui_widget.h"

#include <QCamera>

#include <QCameraViewfinder>

#include <QCameraImageCapture>

#include <QVBoxLayout>

#include <QMenu>

#include <QAction>

#include <QFileDialog>


Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

mCamera = new QCamera(this);

mCameraViewfinder = new QCameraViewfinder(this);

mCameraImageCaputre = new QCameraImageCapture(mCamera, this);

mLayout = new QVBoxLayout;

mOpcionesMenu = new QMenu("Option", this);

mEncenderAction = new QAction("Encender", this);

mApagarAction = new QAction("Apagar", this);

mCapturarAction = new QAction("Capturar", this);


mOptionMenu->addAction({mEncenderAction, mApagarAction, mCapturarAction});


ui->optionPushButton->setMenu(mOptionMenu);

mCamera->setViewfinder(mCameraViewfinder);

mLayout->addWidget(mCameraViewfinder);   //Item을 Widget으로 수정

mLayout->setMargin(0);

ui->scrollArea->setLayout(mLayout);


connect(mEncenderAction, &QAction::triggered, [&](){

mCamera->start();

});


connect(mAagarAction, &QAction::triggered, [&](){

mCamera->stop();

});


connect(mCapturarAction, &QAction::triggered, [&](){

auto filename = QFileDialog::getSaveFileName(this, "Capturar", "/", "Imgae(*.jpg;*.jpeg)");


if (filename.isEmpty()){

return;

}


mCameraImageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile);

QImageEncoderSettings imageEncorderSettings;

imageEncorderSettings.setCodec("image/jpeg");

imageEncorderSettings.setResolution(1288, 964);

mCameraImageCapture->setEncodingSettings(imageEncorderSettings);

mCamera->setCaptureMode(QCamera::CaptureStillImage);

mCamera->start();

mCamera->searchAndLock();

mCameraImageCapture->capture(filename);

mCamera->unlock();

});

}


Widget::~Widget()

{

delete ui;

}


오류 발생! 동영상 보고 코드 다시 확인해보기!

'#C&C++ #영상비전#Qt' 카테고리의 다른 글

#qt 학습 사이트  (0) 2018.09.13
#opencv 2.4.13 설치하기(c/c++)  (0) 2018.09.05
#Qt #Qt 개발자 커뮤니티  (0) 2018.08.28
#Qt버전 확인 #qt 설치 #qmake  (0) 2018.08.24
#Qt #QVision환경설정  (0) 2018.08.24

[참고]

Qt 개발자 커뮤니티 http://www.qt-dev.com/board.php?board=qnaboard&command=body&no=478


Qt Q&A 
작성자전전전
분 류그래픽
ㆍ추천: 0  ㆍ조회: 1291       
 
 Qt 기본적인 이벤트 메시지 질문 
Qt에서 opencv로 비디오를 불러오는데에 있어
기존 콘솔 프로그램과 같이 main안의 while로 출력시 이벤트메시지를 정상적으로 받을 수 있나요?
혹은 다른 방법을 사용해야하나요?
    
이름아이콘 김대진
2016-09-28 11:12
opencv 로 영상 데이터를 불러오는 방법으로 while로 처리하면 자원을 많이 소모하므로 
좋지 않은 방법입니다. opencv로 영상 데이터를 불러오기 위해 Signal 과 Slot 을 이용하면 비동기 방식으로 영상 데이터를 가져오는 방법이 더 효율적입니다. 

OpenCV를 이용해 영상처리 알고리즘을 사용하지 않고 단순히 
영상 데이터만 가져오는 목적으로 사용하신다면 Qt 에서 제공하는 QCamea API를 사용하면 비동기 방식으로
카메라로 영상 데이터를 가져오실 수 있습니다. 

따라서 카메라 영상데이터 (RGB 로우데이터) 를 가져와 QImage로 변환하면 각 픽셀을 접근 할 수 있는 방법도 Qt에서 제공합니다. 

그리고 OpenCV로 영상처리 알고리즘을 처리해야 하는데 있어서 빠르게 처리해야 한다면 OpenCV를 사용하는 것보다는 직접 RGB 로우데이터를 접근해 영상처리를 하는것이 성능상 이점이 있습니다.

[참고]




[참고] http://codingcoding.tistory.com/346


[Qt 버전확인]

$qtchooser -print-env    //Qt 버전확인

$qmake --version           //QMake 버전확인



[qt4 install]

$sudo apt-get install qt4-make libqt4-dev



[참고] http://www.digipine.com/index.php?mid=programming&document_srl=788


[qt5 install]

$sudo apt-get install build-essential qtcreator qt5-default




- 리눅스는 기본적으로 개발자가 Makefile을 직접 작성

- Qt는 자동으로 Makefile을 생성하는 qmake 유틸리티 제공


[방법]

(Qt로 프로젝트 열고 코드 작업 후 작업한 경로에서 터미널 열기)

(이유는 모르겠지만 Qt로 작업하지 않고 그냥 텍스트 열어서 하면 include가 안 됨) -> arm(임베디드 보드), qt5.5.1, Qmake 3.0 버전에서는 안 됨!! (amd64(일반PC), qt4.8.7, Qmake 2.01a 버전에서는 잘 됨!) -> qt4와 qt5가 호환이 안 되는 거라 판단했는데, 생성된 .pro 파일에 "QT += widgets" 등 의 문구를 넣고 make를 실행하니 잘 됨!


$qmake -project      //project.pro 생성

$ls                        //project.pro 확인

$qmake project.pro  //Makefile 생성

$make                   //실행파일 생성






'#C&C++ #영상비전#Qt' 카테고리의 다른 글

#Qt Creator #QCamera 예제  (0) 2018.08.28
#Qt #Qt 개발자 커뮤니티  (0) 2018.08.28
#Qt #QVision환경설정  (0) 2018.08.24
#V4L2를 사용해서 이미지 캡처하기 #우분투  (0) 2018.08.23
#point grey camera #SDK 설치  (0) 2018.08.23

[참고]


1. QVision은 빠른 이미지 프로세싱과 컴퓨터 비전 시제품 개발에 적용하기 위한 무료 개발 툴킷임.
2. 스페인 Murcia 대학의 PARP Computer Perception Research Grup에서 유지해왔으며 학교와 연구용이 주된 목적임



(개인적인 생각 : 링크 연계가 잘 안 되고 왠지 OpenCV에 밀렸다는 느낌을 받음. 하지만 라이브러리 용량도 작고 빠르며 openCV와 CUDA와도 호환 해서 사용할 수 있다하여 설치 도전)  결과 : 실패 (ARM QT5 환경에서 실행)

                                         **일반PC QT4에서 재도전해보기


1. download 압축풀기 (qvision.0.8.1)

2. config.pri.example 파일명을 config.pri 로 변경

3. config.pri 파일은 에디터(vi 또는 gedit)로 열기(설치에 대한 안내가 적혀 있음)

4. $qmake --version (qmake 설치가 되어있어야 함)

5. qvision.pro 파일을 열어서 INSTALL_PATH 값을 설정

######################################################################

# Basic configuration for the library


CONFIG += QVISION


VERSION = 0.8.1


INSTALL_PATH="/usr/local/QVision"


message(QVision library version: $$VERSION)


message(Install path set to: $$INSTALL_PATH)


TEMPLATE = lib

TARGET = qvision


HEADERS += src/qvdefines.h

SOURCES += src/qvdefines.cpp


win32 : CONFIG += console # Windows console output


######################################################################


6. $qmake qvision.pro  //Makefile 생성

7. $make //실행파일 생성

8. 에러발생

....(생략)...

Makefile:972: recipe for target 'build/obj/qvip.o' failed 

make: ***[build/obj/qvip.o] Error 1



[일반 PC Qt4 버전에서 설치 해보기]  (실패! 그래도 qt5보다는 더 많이 설치 하다 오류남)

~qvision.0.8.1$ qmake qvision.pro

Project MESSAGE: --------------------------

Project MESSAGE: Qt version 4.8.7

Project MESSAGE: QVision configured for DEBUG mode

Project WARNING: Performance can increase significantly enabling RELEASE mode

Project MESSAGE: Target platform: Linux

Project MESSAGE: Included module: qvip

Project MESSAGE: Included module: qvmath

Project MESSAGE: Included module: qvblockprogramming

Project MESSAGE: Included module: qvio

Project MESSAGE: --------------------------

Project MESSAGE: QVision library version: 0.8.1

Project MESSAGE: Install path set to: /usr/local/QVision


$make

...(생략)...

/usr/bin/ld: cannot find -lglut

collect2: error: ld returned 1 exit status

Makefile:260: 'lib/libqvision.so.0.8.1' 타겟에 대한 명령이 실패했습니다

make: *** [lib/libqvision.so.0.8.1] 오류 1




[에러 참고]

https://kldp.org/node/77350

[참고]

v4l2 설치, 활성화, 사용법 

https://github.com/DaewoongP/cerule-stream/wiki/V4L2-%EC%84%A4%EC%B9%98,-%ED%99%9C%EC%84%B1%ED%99%94,-%EC%82%AC%EC%9A%A9%EB%B2%95


[공유]v4l2 드라이버 개발자 가이드

https://m.blog.naver.com/manhwamani/10185995106


[번역]vl4l2 - 드라이버 개발자 가이드

http://hoyoung2.blogspot.com/2011/06/v4l2.html




'#C&C++ #영상비전#Qt' 카테고리의 다른 글

#Qt Creator #QCamera 예제  (0) 2018.08.28
#Qt #Qt 개발자 커뮤니티  (0) 2018.08.28
#Qt버전 확인 #qt 설치 #qmake  (0) 2018.08.24
#Qt #QVision환경설정  (0) 2018.08.24
#point grey camera #SDK 설치  (0) 2018.08.23

[참고]


ARM과 임베디드 시스템에서 Spinnaker 사용하기 : https://www.ptgrey.com/tan/11145

OpenCV 시작하기 : https://www.ptgrey.com/tan/10861


https://www.ptgrey.com/support/downloads/ 에서 제품 -> 모델명 -> OS 선택 후 spinnaker SDK 다운로드


$sudo apt-get install libraw1394-11 libusb-1.0-0

spinnkaer SDK 다운로드 압축풀기

$sudo sh install_spinnaker_arm.sh


(설치화면)

This is a script to assist with installation of the Spinnaker SDK.

Would you like to continue and install all the Spinnaker SDK packages? (y/n)$y


Would you like to add a udev entry to allow access to USB hardware?

If this is not ran then your camera may be only accessible by running Spinnaker as sudo.(y/n)$y


This script will assist users in configuring their udev rules to allow access to USB devices. The script will create a udev rule which will add Flir USB devices to a group called flirimaging. The user may also choose to restart the udev daemon. All of this can be done manually as well.


Enter the name of the user to add to this user group.

$ubuntu

Is this user name ok?: ubuntu

(y/n)$y

Add user ubuntu to group flirimaging.

Is this ok?:

(y/n)$y


Writing the udev rules file.


Do you want to restart the udev deamon?

(y/n)$y


[ok] Restarting udev (via systemctl): udev.service.


Configuration complete. A reboot may be required on some systems for changes to take effect


Complete


$reboot    //재실행

+ Recent posts