본문 바로가기
컴퓨터쟁이/Python

error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'circle'

by 빙글빙글이 2022. 3. 2.
728x90
반응형

- img = array_patient[:,:, img_shape[2]//2]

인 상태에서 사용했을 경우에 이러한 오류가 난다. 

error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'circle'
> Overload resolution failed:
>  - Layout of the output array img is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] != elemsize*nchannels)
>  - Expected Ptr<cv::UMat> for argument 'img'

- img2 = array_patient[:,:, img_shape[2]//2].copy()

.copy()를 사용해서 쓰면 오류가 해결된다. 

 

왜 해결이 되는지는 직장동료 분이 알려주셨다. 

[직장동료 분의 조언]

 

data type 문제가 아니라 address 문제라고 합니다. 

맨 처음에는 3dim에서 추출된 2dim slice에 overwrite해서 발생하는 문제라고 생각했는데

 

그게 아니라 C(C++)로 작성된 opencv에서 처리하는데서 발생한 문제라고 합니다. 

 

친절한 직장동료분이 사진까지 캡쳐해서 보여줬습니다. 

초기에 우선 dim 세팅을 한다.
에러가 나온다.

에러가 나온 사진을 보면 마지막 축에서 뽑은 애만 에러가 발생하는 것을 볼 수 있습니다. 

copy하거나 astype을 하면 변수의 addr가 아마 opecv에서 읽을수 있도록 정렬되서 들어가서 오류가 사라집니다. 

 

따라서, copy 말고 astype을 하는 방법도 있다는 사실도 참고하시면 좋습니다. 

 

그리고 이번에 이 문제를 해결하는 동료분을 보면서 느낀건데,

 

어떤 문제가 해결될 때, 왜 그 문제가 해결되는지도 꼭 파악해 보는것이 중요하다는 걸 깨달았습니다. 

 

결국 파이썬도 돌고돌아 openCV의 근본인 C(C++)와 맞물려있으니....

 

나는 파이썬하는데? 하면서 C랑 C++못해염... 이러면서 난모른다!! 가 아니라

 

아 조금씩 더 공부해야한다는 사실입니다. 

 

휴, 나중엔 제가 이런식으로 더 파고들어서 에러를 해결하고 블로그를 남길 수 있는 날이 오길 바래봅니다.

 

 

[참고]

https://stackoverflow.com/questions/23830618/python-opencv-typeerror-layout-of-the-output-array-incompatible-with-cvmat/50128836#50128836

 

python opencv TypeError: Layout of the output array incompatible with cv::Mat

I'm using the selective search here: http://koen.me/research/selectivesearch/ This gives possible regions of interest where an object might be. I want to do some processing and retain only some of ...

stackoverflow.com

 

 

 

https://stackoverflow.com/questions/23830618/python-opencv-typeerror-layout-of-the-output-array-incompatible-with-cvmat

 

python opencv TypeError: Layout of the output array incompatible with cv::Mat

I'm using the selective search here: http://koen.me/research/selectivesearch/ This gives possible regions of interest where an object might be. I want to do some processing and retain only some of ...

stackoverflow.com

 

 

728x90
반응형