废话不说,先上代码。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++编译平台。

解决方案 »

  1.   

    用opencv的cvSaveImage函数不可以吗
      

  2.   

    因为1.0的cvSaveImage没有质量调整参数,而且工作需要现在还不可以换opencv库。所以
      

  3.   

    ijl的库内部拥有不少漏洞。根据网上和本人经验测试,已经找到很多。现自己做答以备后人查询时可以找到答案。
    原因:因为ijl在保存图像时用到了一个或全局量,多个线程同时保存时会发生访问冲突,故写入失败,造成0k现象。
    解决方法:加锁。
      

  4.   

    请问一下在opencv2.2中能调整cvSaveImage的质量参数?如何调整?