cv2.error: OpenCV(4.5.3) error: (-215:Assertion failed) !ssize.empty() in function 'cv::resize'

솔루션 : .... 이게 안될리가 없는데 그럼에도 불구하고 안되는 이유는.... 이미지가 안들어갔을 확률이 큼... 따라서 resize의 property인 image src 가 잘 들어갔는지... 출력해보기......

와 진짜 이미지 안들어갔네;;

 

----- 추가

image = cv2.imread(test, cv2.IMREAD_COLOR)			# 오류 발생

image = np.fromfile(test, np.uint8)					# 해결
image = cv2.imdecode(image, cv2.IMREAD_COLOR)		# 해결

 

요렇게 고쳐야한다.

왜냐하면, 이미지의 경로에 한글!!!!!! 이 들어갔는데, 이게 내부 구조적으로 안읽힌다.

그래서 unicode8로 변환해줘야만 하는 것이었다. 그리고 imdecode에 넣고 이미지를 불러오면 됨.

imread를 한번에 쓰려고 하니까 발생한 오류이다하하

 


* 생성된 가상환경 확인 : 
conda env list
= conda info envs

* 가상환경 설치 : 
conda create -n 가상환경이름 python=설치할버전
(ex : conda create -n test python=3.7)

* 가상환경 활성화 : 
conda activate 가상환경이름
(ex : conda activate test)

* 가상환경 비활성화 : 
conda deactivate 가상환경이름
(ex : conda deactivate test)

* 가상환경 삭제 : 
conda env remove -n 가상환경이름

* 가상환경 라이브러리 설치 (가상환경 활성화 후 설치!)
pip install pandas
pip install tensorflow
pip install opencv-python
pip install keras==2.11.0
pip install imageai
pip install PyQt5
pip install matplotlib
pip install haversine
pip install split-folders
pip install scikit-learn
pip3 install glob2
pip3 install image  (include pillow lib...)

* 라이브러리 최신버전으로 업데이트
pip install keras --upgrade
pip install imageai --upgrade

* 라이브러리 삭제
pip uninstall imageai

* 라이브러리의 특정 버전 설치

(라이브러리 버전업/버전다운 설치는 버전을 붙여서 설치하면 이전에 설치된 버전을 알아서 삭제해주고 새로 설치해줌.)
pip install imageai==2.1.6

* 가상환경에 설치된 라이브러리 확인
conda list



'프로그래밍 > Python' 카테고리의 다른 글

TabNet 설치하기  (4) 2024.01.13
Support vector machine(SVM)  (0) 2023.03.27

 

* error : cv2.error: OpenCV(4.7.0) C:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

 

* 원인 : imread()에서 가져온 이미지 데이터가 없다는 뜻. _src.empty()   그러니까 이미지 데이터 잘 가져오고 있는지 log 찍어보기.

 

 

* ImageAI를 설치하기 위해 Anaconda에 lib를 설치 중이었다. ImageAI는 tensorflow가 1.4.0버전과 그 이상의 버전을 필요로하기 때문에 에러 문구와 함께 나온 다른 버전을 설치하던가... 아니면 설치하려는 tensorflow에 적합한 python버전으로 업그레이드 해줘야한다. 나같은 경우에는 python 버전을 동일하게 가져가야하므로 tensorflow의 버전을 높여서 (그냥 설치하면 최신 버전으로 설치 됨) 설치해보려고 한다.

요구하는 버전 : Python 3.5.1 or higher / Tensorflow 1.4.0 or higher

* error : 

ERROR: Could not find a version that satisfies the requirement tensorflow==1.4.0 (from versions: 1.13.1, 1.13.2, 1.14.0, 1.15.0, 1.15.2, 1.15.3, 1.15.4, 1.15.5, 2.0.0, 2.0.1, 2.0.2, 2.0.3, 2.0.4, 2.1.0, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2.0, 2.2.1, 2.2.2, 2.2.3, 2.3.0, 2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.4.0, 2.4.1, 2.4.2, 2.4.3, 2.4.4, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.6.0rc0, 2.6.0rc1, 2.6.0rc2, 2.6.0, 2.6.1, 2.6.2, 2.6.3, 2.6.4, 2.6.5, 2.7.0rc0, 2.7.0rc1, 2.7.0, 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0)
ERROR: No matching distribution found for tensorflow==1.4.0

* solution : pip install tensorflow

 

Unhandled exception at 0xFEFEFEFE in finalterm_EX.exe: 0xC00001A5: 잘못된 예외 처리기 루틴이 검색되었습니다 (parameters: 0x00000003).

1) 메모리 할당을 안했는데 그냥 가져다 쓴 경우 (즉 변수 정의 안하고 걍 가져다씀)

2) 메모리 할당은 잘 햇는데 들어가는 데이터보다 메모리가 작은 경우

 

체크체크~!

 

C4477 'fscanf_s' : format string '%s' requires an argument of type 'unsigned int', but variadic argument 2 has type 'int *'

fscanf_s(file, "%s %d" , &test[idx].name, test[idx].id)

스트링 포맷 할때 &를 잘 표기했는지 확인하기

 

https://everything.curl.dev/

 

README - Everything curl

AaronChen0 on github, alawvt on github, Amin Khoshnood, amnkh on github, Anders Roxell, Angad Gill, Aris (Karim) Merchant, auktis on github, Ben Bodenmiller Ben Peachey, bookofportals on github, Bruno Baguette, Carlton Gibson, Chris DeLuca, Citizen Esosa,

everything.curl.dev

 

curlCode 라는 데이터 타입으로 정의된 어떤 변수가 있었다.

이런 데이터타입은 기존에 없었으므로 모르는게 당연하다.

알아볼 곳이 필요했는데, 이 사이트에서 관련 함수 또한 찾아볼 수 있었다.

 

const CURLcode isError = curl_easy_perform(curlHandle);
if (isError != CURLE_OK) printf("Error in progress that got source file ");
else {		...		}

 

참고로, curlCode는 에러를 위해 만들어진 데이터 타입이며, 참인 경우 curl_OK(=0)이 반환된다.

curl을 perform 하고 이게 잘 수행되었는지 여부를 따지기에 좋은 것 같았다!

 

 

 

1. #ifdef _debug

#ifdef _DEBUG
#pragma comment (lib, "libcurld.lib")
#else
#pragma comment (lib, "libcurl.lib")
#endif

 

cpp 코딩 시, 맨 윗 줄에 선언해두면 디버깅을 할 때 에러가 난 위치를 알려준다.

보통, 메모리 릭이 발생하면 대강 알려주고 마는데.. 이 코드를 사용하면, 어느 위치에서 발생했는지도 알려준다고 함.

 

뭔가 요롷게 알려주는 것 같다......

 

2. #pragma comment

 

#pragma comment (lib, "wldap32.lib")
#pragma comment (lib, "ws2_32.lib")

 

위의 두 코드로 라이브러리를 링크할 수 있다.

이 방법은 매우 명시적이라서 추가적인 주석 없이도 설명이 충분하게 만든다.

 

+ Recent posts