본문 바로가기
Projects/OpenCV for RaspberryPi

Raspberry Pi 에서 Picam을 이용한 OpenCV 2

by Answer Choi 2015. 2. 12.
반응형



최근 업데이트된 포스트 바로가기!!(클릭!!)










2. camcv 만들기(make a camcv)

 

이제 소스를 다른데로 옮겨서 작업을 하자

 

먼저 home 에 폴더를 하나 만들어 주자

 

cd

 

mkdir camcv

 

cd camcv

 

cp -r /opt/vc/userland/host_applications/linux/apps/raspicam/* .

 

still shot 찍는 명령어인 raspistill을 폴더명과 같은 camcv로 바꿔서 작업을 하자

 

mv RaspiStill.c camcv.c

 

 

ls 명령어로 현재 파일들을 보면 raspistill.c는 없어지고, camcv.c가 생성된 걸 확인할 수 있다.

 

이제 이 폴더에서도 camcv.c로 촬영이 되도록 바꿔보자

 

cmake를 하기위해 cmakelists.txt를 열어보자

 

 

sudo nano CMakeLists.txt

 

기존에 작성되 있는 걸 주석처리나 지워버리고 아래의 내용을 넣자

 

cmakelists.txt


  1. cmake_minimum_required(VERSION 2.8)
  2.  project(camcv)
  3.  SET(COMPILE_DEFINITIONS -Werror)
  4.  
  5. include_directories(/opt/vc/userland/host_applications/linux/libs/bcm_host/include)
  6.  include_directories(/opt/vc/userland/interface/vcos)
  7.  include_directories(/opt/vc/userland)
  8.  include_directories(/opt/vc/userland/interface/vcos/pthreads)
  9.  include_directories(/opt/vc/userland/interface/vmcs_host/linux)
  10.  include_directories(/opt/vc/userland/interface/khronos/include)
  11.  include_directories(/opt/vc/userland/interface/khronos/common)
  12.  include_directories(/home/pi/camcv/)
  13.  include_directories(/home/pi/camcv/gl_scenes/)
  14.  include_directories(/home/pi/camcv/libfacerec/include/)
  15. add_executable(camcv RaspiCamControl.c RaspiCLI.c RaspiPreview.c camcv.c RaspiTex.c RaspiTexUtil.c gl_scenes/teapot.cgl_scenes/models.c gl_scenes/square.c gl_scenes/mirror.c gl_scenes/sobel.c gl_scenes/yuv.c tga.c )
  16. target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so/opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so )



추가!!---------------------------------------------------------------------------------------------


작년말쯤부터 위와 같이 컴파일시 아래의 오류가 발생하는 것 같습니다.


/usr/bin/ld: CMakeFiles/camcv.dir/camcv.c.o: undefined reference to symbol 'sem_post@@GLIBC_2.4'
//lib/arm-linux-gnueabihf/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: ld returned 1 exit status
CMakeFiles/camcv.dir/build.make:392: recipe for target 'camcv' failed
make[2]: *** [camcv] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/camcv.dir/all' failed
make[1]: *** [CMakeFiles/camcv.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2

 

만약 이런 문제 발생시 cmakelists.txt 의 target_link_libraries부분을 아래와 같이 수정해 주세요.


  1. target_link_libraries(camcv /opt/vc/lib/libmmal_core.so /opt/vc/lib/libmmal_util.so /opt/vc/lib/libmmal_vc_client.so /opt/vc/lib/libvcos.so /opt/vc/lib/libbcm_host.so /opt/vc/lib/libGLESv2.so /opt/vc/lib/libEGL.so libpthread.so libm.so)

--------------------------------------------------------------------------------------------------



참고로 samba가 된다면 wordpad로 열면 편집이 쉽다.

 

 

위와 같이 적고 저장을 하고 나온다.

 

cmake .

 

 

cmake가 성공적으로 되었으면 make를 해보자

 

 

make

 

 

 

100% 완료 되었다^^

 

이제 raspistill이 아닌 camcv로 사진촬영을 해보자

 

./camcv -t 1000

 

카메라에 불이 들어오며 제대로 촬영이 되면 성공한 것이다.

 

참고로 위의 cmakelists.txt에서 include가 제대로 되지 않으면 에러가 발생하니 주의 !!

 

 

 

 

먼저 Think RPI 블로그를 보면 필요없는 부분을 지워주라고 되어있다.

 

지워도 되고 안지워도 된다.

 

사용하지 않는 함수들은 아래와 같다.

 

sudo nano camcv.c   (or using word pad)

 

  1. ----------------------------------------Delete list----------------------------------------------
  2.  
  3. static void dump_status(RASPISTILL_STATE *state)
  4.  
  5. static int parse_cmdline(int argc, const char **argv, RASPISTILL_STATE *state)
  6.  
  7. static void display_valid_parameters(char *app_name)
  8.  
  9. static MMAL_STATUS_T add_exif_tag(RASPISTILL_STATE *state, const char *exif_tag)
  10.  
  11. static void add_exif_tags(RASPISTILL_STATE *state)
  12.  
  13. static void store_exif_tag(RASPISTILL_STATE *state, const char *exif_tag)
  14. ---------------------------------------------------------------------------------------------------

 

관련 함수들을 모두 삭제해주자(다시 한번 말하지만 삭제하기 싫음 그냥 넘어가도 됨)

 

 

그리고 default_status(&state); 를 찾아 밑 line에 state.filename=”foobar.jpg”;를 추가 한다

 

저장하고 나와서

 

cmake .

 

make

 

./camcv -t 1000

 

사진이 촬영되면 foobar.jpg파일이 생성될 것이다.

그럼 성공이다.

반응형

인기글