2012-04-03 5 views
0

안녕 나는 다음과 같은 코드 조각 한 :오류 데이터를 복사

void ViewPlane::colourPixel(const int u, const int v, const Colour c){ 

    int step = img->widthStep; 
    cout << "U: " << u << ", V: " << v << ", step: " << step << "\n"; 
    cout << "Colour: " << c.r << ", " << c.g << ", " << c.b << "\n"; 
    cout << "Data: " << v*step+u*3 << ", " << v*step+u*3+1 << ", " << v*step+u*3+2 << "\n"; 
    cout << "Data: " << data[v*step+u*3] << ", " << data[v*step+u*3+1] << ", " << data[v*step+u*3+2] << "\n"; 

    //swap colours round as opencv default image is bgr, not rgb 
    data[v*step+u*3] = c.b; 
    cout << "done it\n"; 
    data[v*step+u*3+1] = c.g; 
    cout << "done it\n"; 
    data[v*step+u*3+2] = c.r; 
    cout <<"done it\n"; 
} 

IMG가, IplImage 포인터이며, 데이터는 내가 U의 값을 많이하고 통해 반복하고

data = (uchar *)img->imageData; 

입니다 v (이미지 좌표) 및 각 픽셀에 색상 할당. 그러나 코드가 u = 148에 도달하면이 픽셀의 중간 지점에서 멈 춥니 다.

값을 인쇄하면이 지점의 녹색 픽셀이 원래 '*'로 나타나며 그 시점까지 유일하게 나타납니다 . 다음은 출력 사본입니다.

.... 
U: 146, V: 0, step: -1219934912 
Colour: 0, 0, 0 
Data: 438, 439, 440 
Data: 
done it 
done it 
done it 
U: 147, V: 0, step: -1219934912 
Colour: 0, 0, 0 
Data: 441, 442, 443 
Data: 
done it 
done it 
done it 
U: 148, V: 0, step: -1219934912 
Colour: 0, 0, 0 
Data: 444, 445, 446 
Data: �, *, � 
done it 

제 질문은이 별이 무엇을 의미합니까? 왜 데이터를 할당하지 못하게합니까?

편집 : 난 그냥 녹색 채널 할당을 주석 시도하고이 오류가 더에 빨강 채널 다시 발생 : 이미지 크기는 400x400px에게

PS입니다. 이번에는 임무를 수행하기 전에 '@'를 개최했기 때문에 이것이 잘못된 일에 아무런 영향을 미치지 않는다고 생각하게됩니다.이 경우 지구상에서 무엇을 할 수 있습니까? 배열 범위를 벗어나지 않고 삽입 할 값이 정수 0입니다 ...

+0

아 .. 죄송합니다. –

+0

"반드시"할 필요는 없지만 다른 사람들을 돕는 것입니다. – josephthomas

+1

저는 스타 캐릭터에 대한 것보다 "-1219934912"라는 단계가 더 걱정 될 것입니다. 길잃은'img' 포인터처럼 보이게합니다. – Pablo

답변

0

프로그램 출력의 단계가 "-1219934912"인 것으로 나타납니다. 길잃은 img 포인터처럼 보이게합니다. 오히려 이미지의 각 라인이 ~ 1GB를 차지할 것입니다.

관련 문제