天嵌 ARM开发社区

 找回密码
 注册
查看: 3824|回复: 12

OV9650抓取一帧图像出错

[复制链接]
yhterry 发表于 2012-4-11 13:11:57 | 显示全部楼层 |阅读模式
本帖最后由 yhterry 于 2012-4-11 13:13 编辑

我用TQ2440,WinCE系统,OV9650摄像头抓取一帧图像,使用的方法就是
  1. ret=DeviceIoControl(m_hled,CAM_IOCTL_SAMSUNG_CAM_PR,NULL,NULL,(PBYTE)&image,NULL,NULL,NULL);
复制代码
但是得到的数据保存成bmp图出现了错位


这个要怎么解决啊?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
TQ-ZQL 发表于 2012-4-11 14:43:08 | 显示全部楼层
有可能是你输出的像素与你屏显示的像素的分辨率不匹配造成的,或者是你最后将图像放在屏时显示时数据没有放好。
 楼主| yhterry 发表于 2012-4-12 09:26:15 | 显示全部楼层
TQ-ZQL 发表于 2012-4-11 14:43
有可能是你输出的像素与你屏显示的像素的分辨率不匹配造成的,或者是你最后将图像放在屏时显示时数据没有放 ...

我之前在CSDN上也查到有人说是camera的像素和屏像素不一致造成的,但是我这个图是保存成bmp图后打开看的,感觉和屏像素应该没什么关系吧?
TQ-ZQL 发表于 2012-4-13 09:13:28 | 显示全部楼层
本帖最后由 TQ-ZQL 于 2012-4-13 09:13 编辑

那你可以看下你bmp的像素设置与你的摄像头输出是不是一致的。或者直接将摄像头数据放到屏上显示下(用匹配的像素)。以确定下是不是像素不匹配引起的。
 楼主| yhterry 发表于 2012-4-13 09:26:43 | 显示全部楼层
TQ-ZQL 发表于 2012-4-13 09:13
那你可以看下你bmp的像素设置与你的摄像头输出是不是一致的。或者直接将摄像头数据放到屏上显示下(用匹配的 ...

我这个预览是没有问题的,但是摄像头的数据想要显示不是只能保存成bmp吗?bmp图出错..
TQ-ZQL 发表于 2012-4-13 09:55:54 | 显示全部楼层
jpeg或者其它的都行,只要你知道相应的算法,你就可以保存成你想要的格式。具体算法可能要到网上找一下
w492901074 发表于 2012-4-13 22:55:42 | 显示全部楼层
存放地址,像素,读取地址,数据读取顺序,至少错2个
connortao 发表于 2012-4-14 00:34:14 | 显示全部楼层
预览没错的话,很可能就是你保存图像为BMP文件时出错了。
 楼主| yhterry 发表于 2012-4-14 17:22:36 | 显示全部楼层
w492901074 发表于 2012-4-13 22:55
存放地址,像素,读取地址,数据读取顺序,至少错2个

怎么才能找出来?
 楼主| yhterry 发表于 2012-4-14 17:24:09 | 显示全部楼层
connortao 发表于 2012-4-14 00:34
预览没错的话,很可能就是你保存图像为BMP文件时出错了。
  1. SetKMode(TRUE);
  2.                 memcpy(DDBdata,(void *)image.rgb_address,width*height*2);
  3.                 SetKMode(FALSE);
  4.                 CBitmap bitmap;
  5.                 HBITMAP dstBmp;
  6.                 bitmap.CreateBitmap(width,height,1,16,DDBdata);
  7.                 HDC hdcSrc = CreateCompatibleDC(NULL);
  8.                 HDC hdcDst = CreateCompatibleDC(NULL);
  9.                  BITMAPINFOHEADER   bih   =   {0};//位图信息头   
  10.          bih.biBitCount   =   16;//每个像素字节大小   
  11.          bih.biCompression   =   BI_RGB;   
  12.          bih.biHeight   =   height;//高度   
  13.          bih.biPlanes   =   1;   
  14.          bih.biSize   =   sizeof(BITMAPINFOHEADER);   
  15.          bih.biSizeImage   =  0;// width*height*2;//图像数据大小   
  16.          bih.biWidth   =   width;//宽度   
  17.          BITMAPFILEHEADER   bfh   =   {0};//位图文件头   
  18.          bfh.bfOffBits   =   sizeof(BITMAPFILEHEADER)   +   sizeof(BITMAPINFOHEADER);//到位图数据的偏移量   
  19.          bfh.bfSize   =   bfh.bfOffBits + width*height*2;//文件总的大小   
  20.          bfh.bfType   =   (WORD)0x4d42;   
  21.                  BITMAPINFO bi={0};
  22.                  bi.bmiHeader=bih;
  23.                 dstBmp=CreateDIBSection(hdcDst, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void **)&DIBdata, NULL, 0);
  24.                 SelectObject(hdcDst, dstBmp);
  25.                 SelectObject(hdcSrc, bitmap);
  26.                 BitBlt(hdcDst, 0, 0, width, height, hdcSrc, 0, 0, SRCCOPY);
  27.                 CFile file(_T("image.bmp"),CFile::modeCreate|CFile::modeReadWrite);
  28.                 file.Write(&bfh,sizeof(bfh));
  29.                 file.Write(&bih,sizeof(bih));
  30.                 file.Write(DIBdata,width*height*2);
  31.                 file.Close();
复制代码
这是我保存bmp的代码,这个是网上的,别人都没有问题...
herorising 发表于 2012-4-17 13:13:54 | 显示全部楼层
我也这个问题 顶
 楼主| yhterry 发表于 2012-4-20 09:07:27 | 显示全部楼层
谢谢各位的回复,我的问题已经解决了!我用的TQ2440,3.5寸屏,预览图像的大小是240*180,但是我保存到bmp的时候用的是320*240,导致图像错位了~
herorising 发表于 2012-4-20 21:40:54 | 显示全部楼层
这个预览是在驱动中改的吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-3-28 21:13 , Processed in 1.062500 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表