728x90

Framework/OpenCV 7

[OpenCV] 안드로이드에서 속도 개선해보기

최근에 안드로이드와 iOS에서 openCV를 사용할 일이 생겼다. 환경설정까지는 다른 분께서 해주셔서 큰 신경 쓰지 않고, 바뀐 언어 환경에서 같은 로직을 적용해본 결과 생각보다 느렸다. 오랜만에 급하게 하다가 깜빡한 게 생각나서 기록하는 겸, 왜 느려졌는지 그 이유와 개선방법에 대해서 적어보려고 한다. 먼저 로직을 간단하게 적어보자면 이렇다. - 이미지를 받아온다. - ROI 관심영역을 추출한다. - 추출한 영역 내에서 픽셀마다 값을 변경한다. - 변경된 이미지를 내보낸다. openCV를 써본 사람이면 아주 쉽게 접하는 일이다. 안드로이드에서 간단하게 예시를 보여주자면 이렇다. val src = Mat() //grayScale 이라고 가정 val dest = Mat() for(rowIdx: Int in..

Framework/OpenCV 2023.09.21

[3D LUT] 에 대해 이해한 내용 적어보기

최근에 이미지 보정 관련하여 일이 있어서 조사해보던 중에 LUT 에 대해 알게 되었고, 궁금했던 부분과 공부한 내용에 대해 짧게 적어보려고 한다. 내가 궁금했던 내용들은 이렇다. LUT가 뭐지?? 3차원의 RGB 픽셀을 어떻게 LUT를 적용시키는지, 적용 방법 3D Cube 파일 LUT 적용 방법 CUBE 파일의 LUT_SIZE는 왜 홀수인지?? LUT(Look Up Table)가 뭐지? LUT는 Look Up Table의 약자이다. LUT는 말 그대로 룩업 테이블, 찾아 보는 테이블이라는 뜻으로 엑셀에서의 LOOKUP 함수를 안다면 이해하기 쉬운데, 더 이해하기 쉽게 이미지를 가져왔다. 그림을 참고해서 왼쪽의 테이블(Table)이 제공된 상황에서는 A07이라는 부품을 알기 위해선 찾아보기만 하면(Loo..

Framework/OpenCV 2023.08.14

[OpenCV] C++ Mat 채널 변경 (permute, transpose)

딥러닝은 보통 파이썬에서 TensorFlow나 PyTorch 라이브러리를 이용해 진행된다. 파이썬에서는 [B, C, H, W] 같은 형태로 결과물이 나오게 되지만, OpenCV C++에서는 [H, W, C] 의 형태를 지닌다. 그림에서 위는 OpenCV에서 픽셀을 인식하는 방법, 아래는 딥러닝에서의 결과로 어떻게 다른지 볼 수 있다. C++에서 딥러닝 기반의 영상처리를 진행하다 보면 [B, C, H, W] 형태의 결과를 C++ OpenCV 형식 [H, W, C]에 맞게 변경이 필요할 때도 있다. 배치 사이즈는 1이라는 가정 하에서, 채널을 변경하는 방법은 아래와 같다. model_result 라는 포인터가 모델 아웃풋을 가리키고 있다는 가정 하에 채널 덩어리를 한채널씩으로 합치면 된다. float* mo..

Framework/OpenCV 2021.12.08

VIDEOIO(CV_IMAGES): raised OpenCV exception 에러

cv::VideoWriter::open VIDEOIO(CV_IMAGES): raised OpenCV exception: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\videoio\src\cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): /outputs/test.avi in function 'cv::icvExtractPattern' 처음에는 원인이 ffmpeg이랑 뭐가 안맞나부터 시작해서 opencv 를 재설치해보고 이것저것 해보았지만 나의 경우는 이런 문제가 아니였다. 나의 경우 알고보니 경로를 못찾아서 생긴 이..

Framework/OpenCV 2021.08.25

[OpenCV] 라이브러리 별 Resize 성능 차이

검색을 해보다가, 알게 된 내용으로 각 라이브러리 별로 Resize를 하는데도 차이가 존재한다는 것을 알게 되었다. 1. PIL vs OpenCV 간 BICUBIC 차이 Case 2를 보면 같은 이미지를 PIL, OpenCV 방식으로 불러왔는데 완벽히 같지 않다는 내용을 볼 수 있다. 그리고, 이에 대해 비슷하게 누군가가 실험한 예시이다. 2번째 행에서 왼쪽이 OpenCV, 오른쪽이 PIL을 이용한 예시인데, 3x3 픽셀의 좌측 하단과 우측하단을 보면 OpenCV의 경우 전반적으로 더 밝고, PIL의 경우 더 어둡다. 아래는 PIL과 Matlab으로 resize를 진행헀을 때의 차이값으로 생각보다 많은 픽셀값들이 다름을 확인할 수 있다. 게다가 매우 중요한 건 Super Resolution같은 세밀함을 ..

Framework/OpenCV 2021.07.22
728x90