2011-11-21 3 views
0
IplImage *img; 
img = (IplImage **)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    img = cvLoadImage(filename, 0); 
} 

안녕하세요! 이 코드 조각은 오류를 생성합니다. 'IplImage ** {aka _IplImage * }'을 'IplImage {aka _IplImage *}'로 할당 할 수 없습니다. 여기에 여러 이미지를로드하려고합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 감사!IplImage **을 IplImage로 변환하는 중 오류가 발생했습니다. *

답변

0

IplImage에 대한 포인터가되도록 'img'를 선언하면 포인터로 포인터로 변환하려고합니다. (IplImage**) - IplImage **에 IplImage **를 할당하려고하므로이 특별한 경우에는이 형식 변환이 올바르지 않습니다.

iml : IplImage ** img;

+0

img가 IplImage ** img로 선언 된 경우 너비와 높이에 어떻게 액세스 할 수 있습니까? 그리고 어떻게 함수를 cvSetImageROI로 올바르게 사용할 수 있습니까? 위와 같이 img을 선언 한 후에 문제가 발생하기 때문에 올바른 구문은 무엇입니까? 고마워요! – cmsl

+0

이것을 다음과 같이 생각하십시오. 객체 또는 임의의 데이터 유형에 대한 포인터를 선언하면 int * pointerToInt; 우리는이 포인터가 정수 배열을 가리키게 할 수 있습니다. 그렇게하면 (정적 또는 동적으로) 포인터 배열의 N 번째 멤버에 액세스 할 수 있습니다. pointerToInt [N]. 배열을 동적으로 선언하더라도 (int * pointerToInt = new int [MagicalNumber]) 포인터가 있다고 진실로 말하면 어레이 첨자 연산자 []를 통해 여전히 액세스 할 수 있습니다. 그래서 pointerToInt [MagicalNumber-1]이 작동합니다. 2D 배열에도 동일하게 적용됩니다. – ScarletAmaranth

+0

우리는 int ** pointerToIntPointer - 포인터에 대한 포인터를 선언합니다. 동적으로 할당하는 것은 루프를 포함 할 것이고 여기에서 세부 사항으로 들어가고 싶지는 않지만 다시 정적으로 말할 수 있습니다 : int pointerToIntPointer [MagicalNumber0] [MagicalNumber1]; 그런 다음 배열 첨자 연산자를 사용하여 배열에 액세스합니다. - int pointerToIntPointer [MagicalNumber0-1] [MagicalNumber1-1]; '원시 포인터'와 비슷하게 동적으로 할당 된 배열에 대해 동일한 구문을 사용할 수 있습니다. 또한 동적으로 할당 할 배열을 [] 삭제하는 것을 잊지 마십시오! :) 그냥 선생님 '. – ScarletAmaranth

0

img이기 때문에, 각 루프 후 IMG 포인터를 전진하지위한 것거야 다음 오류가 반복

0

, 다음 IplImage** img;, img[index] = cvLoadImage(filename, 0)를 선언보십시오 그런데이

IplImage** img; 
img = (IplImage**)malloc(IMAGE_NUM * sizeof(IplImage *)); 

for(index=0; index<IMAGE_NUM; index++){ 
    sprintf(filename, "preproc/preproc%d.jpg", index); 
    *img = cvLoadImage(filename, 0); 
} 

시도 IplImage 포인터의 배열과 cvLoadImage()는 단일 이미지를 반환합니다.

관련 문제