Opencv 3.4 이후 문제점.
(제공 버전과 Source Build를 통해 Test를 진행하였다. 4.1.2, 3.8.4, 3.4.0 )

- Memory Leak이 있다.(단지 링크 순서에 의한 것이라지만-Debug상)

 

OpneCV 진영의 먹칠(??)이다 ㅡ.ㅡ;


조치 1)
Static MFC DLL로 조치
     --> cv::Mat을 사용할 때 __acrt_first_block == header
heap Error 발생.(debug에서만 발생.)
(사용 불가.)
     --> Local Project는 Debug이지만 Dll은 신뢰 하영 Release로 Link시 사용하는 Opencv C++ Class Link error 발생.
(사용 불가.)

조치 2)
모두 동적 Link로 Build 지연된 DLL로 변경. 프로그램 시작(동작 없이) 종료 시 Leak 없음.
     -->cv::Mat Class 함수 호출 IplImage 사용호 종료 시 Memory Leak 발생.

결론 현재 VS2017로 컴파일하는 3.2 버전 이상에서는
     => Memory Leak을 조치하면, __acrt_first_block == header 발생으로 C++Mat를 사용할 수 없다.
     => 다중 스레드 디버그(/MTd and /MT)에서 그나마 유연하게 동작한다.
          (__acrt_first_block == header를 발생시키는 코드도 있다.)
     => 3.2 이상 버전으로 갈수록 C++형태의 코드와 더 많은 STL사용으로 컴파일 강도가 높아지고 있는 듯하다.

 

다른 분들은 어떠실지 모르지만 현재 3.2 버전 이후에는
Memory Leak, Heap에러의 조치가 없다면, 버전업을 할 수 없을 듯하다.
- 가짜 Memory Leak은 Main S/W Debugging을 힘들게 한다.
- Heap에러는 S/W 신뢰도를 떨어뜨린다.

 

다른 의견이나 정보가 있으시면 공유 부탁드립니다.........

 

Heap Error 발생 코드. (3.4.0 이후...)

void MatTest(Mat*pdraw)
{
	Mat ProcImg = pdraw->clone();
	vector<vector<Point>> contours;
	cv::findContours(ProcImg, contours, RetrievalModes::RETR_EXTERNAL, 
    ContourApproximationModes::CHAIN_APPROX_NONE);
}
void CMatTesterDlg::OnBnClicked()
{
	TCHAR szFilter[] = 
    _T("Image (*.bmp, *.gif, *.jpg *.tif)|*.bmp;*.gif;*.jpg;*.tif|All Files(*.*)|*.*||");
	CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter, GetParent());
	dlg.m_ofn.lpstrInitialDir = MARK_IMG_PATH;
	if (IDOK == dlg.DoModal())
	{
		USES_CONVERSION;
		CString strPathName = dlg.GetPathName();
		Mat matLoadImg = imread(W2A(strPathName.GetBuffer(strPathName.GetLength())), 
        cv::IMREAD_COLOR);

		if (matLoadImg.empty() != true)
		{
			Mat matCh1Img;
			cvtColor(matLoadImg, matCh1Img, ColorConversionCodes::COLOR_RGB2GRAY);
			
			cv::threshold(matCh1Img, matCh1Img, 50, 255, THRESH_BINARY);
			MatTest(&matCh1Img);
			
			namedWindow("Process", WINDOW_NORMAL); // Create a window for display.
			imshow("Process", matLoadImg);
		}
	}
}

 

 

설정 상태.

'작업 > OpenCV' 카테고리의 다른 글

CvvImage 추가 3.4 까지  (0) 2021.11.09
처리시간 측정  (0) 2020.07.17
OpenCV 컴파일(3.4.0, 3.4.8, 4.1.2)  (0) 2019.11.21
OpenCV 4.x.x 사용 C++ Runtime Library Debug  (0) 2019.11.20
OpenCV Memory Leak  (0) 2019.11.20

+ Recent posts