- 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에서 처리하는데서 발생한 문제라고 합니다.
친절한 직장동료분이 사진까지 캡쳐해서 보여줬습니다.
에러가 나온 사진을 보면 마지막 축에서 뽑은 애만 에러가 발생하는 것을 볼 수 있습니다.
copy하거나 astype을 하면 변수의 addr가 아마 opecv에서 읽을수 있도록 정렬되서 들어가서 오류가 사라집니다.
따라서, copy 말고 astype을 하는 방법도 있다는 사실도 참고하시면 좋습니다.
그리고 이번에 이 문제를 해결하는 동료분을 보면서 느낀건데,
어떤 문제가 해결될 때, 왜 그 문제가 해결되는지도 꼭 파악해 보는것이 중요하다는 걸 깨달았습니다.
결국 파이썬도 돌고돌아 openCV의 근본인 C(C++)와 맞물려있으니....
나는 파이썬하는데? 하면서 C랑 C++못해염... 이러면서 난모른다!! 가 아니라
아 조금씩 더 공부해야한다는 사실입니다.
휴, 나중엔 제가 이런식으로 더 파고들어서 에러를 해결하고 블로그를 남길 수 있는 날이 오길 바래봅니다.
[참고]
'컴퓨터쟁이 > Python' 카테고리의 다른 글
pyhton Error :SettingWithCopyWarning 해결 방법 (0) | 2022.03.31 |
---|---|
우분투 jupyter notebook 파일 삭제 후 복원하기 (0) | 2022.03.08 |
python 패키징 하는 방법 2 - py2exe (1) | 2021.08.26 |
python 패키징 하는 방법 1- Pyinstaller (1) | 2021.08.26 |
pyinstaller 윈도우10 액세스 거부 오류 (0) | 2021.08.25 |