ov511 카메라를 사용하는데 어떻게 하면 컬러 640 * 480으로 디스플레이 가능 한가요?
글쓴이: falhed / 작성시간: 월, 2009/03/16 - 11:44오전
QImage _image(640, 480, QImage::Format_RGB32)이고
unsigned char DisplayImage[640][480][3]으로 선언하구요...
len = read(g_camera.dev, g_camera.pic, 640 * 480/4.0*6.0);
하니 length =460800이네요...
memcpy((void *)DisplayImage, (void *)g_camera.pic, IMAGEWIDTH*IMAGEHEIGHT*DEPTH);
dst = _image.bits();
for(int i=0; i
for(int j=0; j
{
dst[i*IMAGEWIDTH*4 + j*4 + 0 ] = DisplayImage[i][j][0];
dst[i*IMAGEWIDTH*4 + j*4 + 1 ] = DisplayImage[i][j][1];
dst[i*IMAGEWIDTH*4 + j*4 + 2 ] = DisplayImage[i][j][2];
dst[i*IMAGEWIDTH*4 + j*4 + 3 ] = 0;
}
이렇게 디스플레이 하니
제일 영상이 3개로 나눠져 디스플레이 하네요...흠....여기서 어떻게 해야 한 화면에 컬러이미지로 디스플레이 되나요.
Forums:
QT4에서 usb cam 영상을 받아보려고 합니다..그런데 디스플레이 하는 부분에서 계속 메모리 오류가 나네요..
QImage _image(320, 240, QImage::Format_RGB32);선언하구요...
len = read (g_camera.dev, g_camera.pic, g_camera.vid_caps.maxwidth * g_cam
era.vid_caps.maxheight*DEPTH);
printf("Image size : %d \n", len); --> 115200이 뜨네요...
if (len <= 0)
fprintf(stderr, "Error reading image...\n");
else
{
fprintf(stderr, "%d\n", len);
fprintf(stderr, "%d\n", g_camera.vid_caps.maxwidth * g_camera.vid_caps.maxheight*DEPTH);
그리고 len은 115200 이고, 밑에는 921600이 뜹니다..
memcpy((void *)DisplayImage, (void *)g_camera.pic, IMAGEWIDTH*IMAGEHEIGHT*DEPTH);
dst = _image.bits();
--> 여기까지는 이상이 없는데요..
for(int i=0; i for(int j=0; j {
dst[i*IMAGEWIDTH*4 + j*4 + 0 ] = DisplayImage[i][j][0];
dst[i*IMAGEWIDTH*4 + j*4 + 1 ] = DisplayImage[i][j][1];
dst[i*IMAGEWIDTH*4 + j*4 + 2 ] = DisplayImage[i][j][2];
dst[i*IMAGEWIDTH*4 + j*4 + 3 ] = 0;
}
repaint();
}
}
for문 안에서 에러가 발생합니다..ㅠㅠㅠ 원인을 계속 찾고 있는데 모르겠어요..
무엇이 문제인가요?
115200란 숫자를 보니
115200란 숫자를 보니 드라이버에서 영상을 YUV420으로 제공하는 것 같군요. 드라이버에서 할당한 영상 버퍼 크기도 그 정도로 되어 있어서, memcpy에서 그것보다 큰 용량을 복사하려다가 세그먼트 오류가 나는 것 같습니다. 일단 드라이버에서 제공하는 영상 형식을 다시 확인하신 후, memcpy 명령에 올바른 영상 크기를 넣으셔야 할 것 같습니다.
혹시 RGB32 형식의 영상이 꼭 필요하시면 먼저 드라이버에서 그런 형식으로 전송하도록 설정을 하시고, 만약 안 된다면(드라이버에 그런 기능이 없을 가능성이 꽤 있습니다) 라이브러리나 인터넷에서 변환 루틴을 검색하셔서 이용하셔야 할 것 같군요.
현재 yuv로 영상을 받아왔습니다. 디스플레이 하니 흑백이고 3등분으로 디스플레이 되네요..ㅠㅠ
어떻게 하면 컬러로 디스플레이 가능한가요?
for(int i=0;i<640;i++)
for(int j=0;j<480;j++)
{
dst[i*640 * 4+ j*4 + 0 ] = DisplayImage[i][j][0];
dst[i*640 * 4+ j*4 + 1 ] = DisplayImage[i][j][1];
dst[i*640 * 4+ j*4 + 2 ] = DisplayImage[i][j][2];
dst[i*640 * 4+ j*4 + 3 ] = 0;
}
어떻게 하면 640 *480 컬러 이미지를 디스플레이를 할 수 있나요?
소스를 넣을때는 [ c o d e ] [ / c o d e ]테그를 사용하세요
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.
YUV 로 받아 오신
YUV 로 받아 오신 거라면 변환식을 사용해야 raw rgb 를 얻을 수 있을 겁니다.
자세한 내용은
"Video demystified, fourth edition" 을 참조해 보십시요.
========================
조직 : E.L.D(Embedded Linux Developer/Designer)
블로그 : poplinux@tistory.com
카페 : cafe.naver.com/poplinux
임베디드 리눅스 관련 프리렌서 지향
댓글 달기