2009. 10. 26. 05:07
이미지도 0~255 까지라 BYTE고 mask도 BYTE로 하고 계속 코딩해나갔다.
BYTE Ymask[9] = { 1, 2, 1,
0, 0, 0,
-1, -2, -1};
실제 문제는
product.correlation(3, 3, Xmask, MyImg.getX(), MyImg.getY(),
MyImg.getImg2DPointer(), XSobel.getImg2DPointer());
여기서 터졌다.
for (int j=0; j < _iy; j++)
{
for(int i=0; i< _ix; i++)
{
int temp = 0;
int idx = 0;
for(int b=-py; b <= py; b++)
{
for(int a=-px; a <= px; a++)
{
int hi = static_cast<int>(getV(j +b, i + a));
int m = _mask[idx];
temp += static_cast<int>(getV(j + b , i + a ) * _mask[idx++]);
}
}
_after[j][i] = static_cast<BYTE>(temp);
}
}
무려 4중 for문.
코드를 보면 머 알겠냐? 로직은 문제 없는것 같고, 디버깅하다 하다 (딴대를 삽질 했음)
결국 보조 변수를 두고 보니. mask 값이 이상한것이다.
"어? warn L4에선 저런거 다 잡아 주는데?"
실제로 확인하니 언제 내가 바꾼건지. L3로 바껴져 있엇다.
오늘의 교훈:
C 시간에 int 자료형 크기 외운 프로그래머 심정을 알것다.
L4가 진리
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
그 1억짜리 코드 체크기 안살꺼면 L4하고 ms 코드 체커기 돌려 (따른거 없나?)
결과: 열심히 삽질중. 쓸만한건 못건져
1>C/C++ 코드 분석을 실행하고 있습니다...
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(111) : warning C6211: 예외로 인해 'pSpectrum' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 105, 107, 109, 111, 112, 114
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(167) : warning C6211: 예외로 인해 'pPhase' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 157, 159, 161, 167, 168, 170
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(388) : warning C6211: 예외로 인해 'tr' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 386, 388, 389
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\quantizelevel2.cpp(59) : warning C6246: 'nPos'의 지역 선언이 외부 범위에 있는 같은 이름의 선언을 숨깁니다. 자세한 내용은 줄 '54'('c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\quantizelevel2.cpp')에 있는 이전 선언을 참조하십시오.: Lines: 54
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\dib.cpp(690) : warning C6011: NULL 포인터 'lpbi'을(를) 역참조하고 있습니다.: Lines: 667, 668, 669, 672, 675, 678, 679, 686, 687, 689, 690
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(132) : warning C6211: 예외로 인해 '_Re' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 128, 132, 133
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(333) : warning C6001: 초기화되지 않은 메모리 'y'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(334) : warning C6001: 초기화되지 않은 메모리 'x'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333, 334
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(336) : warning C6001: 초기화되지 않은 메모리 'w'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333, 334, 333, 334, 333, 334, 336
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(369) : warning C6211: 예외로 인해 '_tempIm' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 367, 369, 370
1>코드를 생성하고 있습니다...
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(337) : warning C4701: 초기화되지 않았을 수 있는 'w' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(334) : warning C4701: 초기화되지 않았을 수 있는 'x' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(333) : warning C4701: 초기화되지 않았을 수 있는 'y' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(337) : warning C4701: 초기화되지 않았을 수 있는 'z' 지역 변수를 사용했습니다.
1>빌드 로그가 "file://c:\Documents and Settings\newpolaris\My Documents\Visual Studio 2008\Projects\myCV\myCV\Debug\BuildLog.htm"에 저장되었습니다.
BYTE Ymask[9] = { 1, 2, 1,
0, 0, 0,
-1, -2, -1};
실제 문제는
product.correlation(3, 3, Xmask, MyImg.getX(), MyImg.getY(),
MyImg.getImg2DPointer(), XSobel.getImg2DPointer());
여기서 터졌다.
for (int j=0; j < _iy; j++)
{
for(int i=0; i< _ix; i++)
{
int temp = 0;
int idx = 0;
for(int b=-py; b <= py; b++)
{
for(int a=-px; a <= px; a++)
{
int hi = static_cast<int>(getV(j +b, i + a));
int m = _mask[idx];
temp += static_cast<int>(getV(j + b , i + a ) * _mask[idx++]);
}
}
_after[j][i] = static_cast<BYTE>(temp);
}
}
무려 4중 for문.
코드를 보면 머 알겠냐? 로직은 문제 없는것 같고, 디버깅하다 하다 (딴대를 삽질 했음)
결국 보조 변수를 두고 보니. mask 값이 이상한것이다.
"어? warn L4에선 저런거 다 잡아 주는데?"
실제로 확인하니 언제 내가 바꾼건지. L3로 바껴져 있엇다.
오늘의 교훈:
C 시간에 int 자료형 크기 외운 프로그래머 심정을 알것다.
L4가 진리
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\mycvdoc.cpp(231) : warning C4245: '초기화 중' : 'int'에서 'BYTE'(으)로의 변환입니다. signed 또는 unsigned가 일치하지 않습니다.
그 1억짜리 코드 체크기 안살꺼면 L4하고 ms 코드 체커기 돌려 (따른거 없나?)
결과: 열심히 삽질중. 쓸만한건 못건져
1>C/C++ 코드 분석을 실행하고 있습니다...
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(111) : warning C6211: 예외로 인해 'pSpectrum' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 105, 107, 109, 111, 112, 114
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(167) : warning C6211: 예외로 인해 'pPhase' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 157, 159, 161, 167, 168, 170
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cfourier.cpp(388) : warning C6211: 예외로 인해 'tr' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 386, 388, 389
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\quantizelevel2.cpp(59) : warning C6246: 'nPos'의 지역 선언이 외부 범위에 있는 같은 이름의 선언을 숨깁니다. 자세한 내용은 줄 '54'('c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\quantizelevel2.cpp')에 있는 이전 선언을 참조하십시오.: Lines: 54
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\dib.cpp(690) : warning C6011: NULL 포인터 'lpbi'을(를) 역참조하고 있습니다.: Lines: 667, 668, 669, 672, 675, 678, 679, 686, 687, 689, 690
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(132) : warning C6211: 예외로 인해 '_Re' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 128, 132, 133
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(333) : warning C6001: 초기화되지 않은 메모리 'y'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(334) : warning C6001: 초기화되지 않은 메모리 'x'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333, 334
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(336) : warning C6001: 초기화되지 않은 메모리 'w'을(를) 사용하고 있습니다.: Lines: 308, 310, 312, 314, 326, 328, 329, 333, 334, 333, 334, 333, 334, 336
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(369) : warning C6211: 예외로 인해 '_tempIm' 메모리 누수가 발생하고 있습니다. 로컬 catch 블록을 사용하여 메모리를 정리하십시오.: Lines: 367, 369, 370
1>코드를 생성하고 있습니다...
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(337) : warning C4701: 초기화되지 않았을 수 있는 'w' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(334) : warning C4701: 초기화되지 않았을 수 있는 'x' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(333) : warning C4701: 초기화되지 않았을 수 있는 'y' 지역 변수를 사용했습니다.
1>c:\documents and settings\newpolaris\my documents\visual studio 2008\projects\mycv\mycv\cmyfourier.cpp(337) : warning C4701: 초기화되지 않았을 수 있는 'z' 지역 변수를 사용했습니다.
1>빌드 로그가 "file://c:\Documents and Settings\newpolaris\My Documents\Visual Studio 2008\Projects\myCV\myCV\Debug\BuildLog.htm"에 저장되었습니다.