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 |