ijl和opencv的高手请进,关于保存jpg图片的问题。

Yluo_D 2011-03-02 06:54:12
废话不说,先上代码。

BOOL SaveJpgImage(IplImage * pImg,char * dir,BOOL bColor,UINT nQuality)
{
if(pImg==NULL)return FALSE;
JPEG_CORE_PROPERTIES image;
ZeroMemory(&image, sizeof(JPEG_CORE_PROPERTIES));
if(ijlInit(&image)!=IJL_OK)return FALSE;
image.jquality = nQuality;
image.upsampling_reqd = image.cconversion_reqd = FALSE;
image.DIBWidth = pImg->width;
image.DIBHeight = pImg->height;
image.DIBBytes = (unsigned char * )pImg->imageData;
image.JPGFile = dir;
image.JPGBytes = NULL;
image.JPGSizeBytes = pImg->imageSize;
image.JPGWidth = pImg->width;
image.JPGHeight = pImg->height;
image.DIBColor =IJL_BGR;
image.DIBChannels =3;
image.DIBPadBytes =IJL_DIB_PAD_BYTES(image.DIBWidth,3);
if(bColor)
{
image.JPGColor =IJL_YCBCR;
image.JPGChannels =3;
image.JPGSubsampling =IJL_411;
}
else
{
image.JPGColor =IJL_G;
image.JPGChannels =1;
image.JPGSubsampling =IJL_NONE;
}
if (ijlWrite(&image,IJL_JFILE_WRITEWHOLEIMAGE)!=IJL_OK)return FALSE;
if(ijlFree(&image)!=IJL_OK)return FALSE;
return TRUE;
}

参数分别为IplImage指针一个,存储路径,是否彩色,和压缩比。
我存的是彩色图片,压缩比为70,发现这样一个问题。
每百张图片会有几张存储失败,大小为0k的图片,一直不知道原因所在,请赐教!
PS:貌似图片像素越多发生概率越大,用的是opencv1.0和ijl 1.51.12.44版本,vs2005 c++编译平台。
...全文
458 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
txq421 2012-01-12
  • 打赏
  • 举报
回复
请问一下在opencv2.2中能调整cvSaveImage的质量参数?如何调整?
Yluo_D 2011-04-28
  • 打赏
  • 举报
回复
ijl的库内部拥有不少漏洞。根据网上和本人经验测试,已经找到很多。现自己做答以备后人查询时可以找到答案。
原因:因为ijl在保存图像时用到了一个或全局量,多个线程同时保存时会发生访问冲突,故写入失败,造成0k现象。
解决方法:加锁。
Yluo_D 2011-03-24
  • 打赏
  • 举报
回复
= =唉。。估计没解了。。结贴。。
Yluo_D 2011-03-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fengbingchun 的回复:]
用opencv的cvSaveImage函数不可以吗
[/Quote]
因为1.0的cvSaveImage没有质量调整参数,而且工作需要现在还不可以换opencv库。所以。。。
fengbingchun 2011-03-02
  • 打赏
  • 举报
回复
用opencv的cvSaveImage函数不可以吗

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧