opencv图片压缩后读取的像素值,和保存后读出来的像素值不一样的问题。
2017-12-14 18:42
513 查看
最近在写opencv压缩图片的逻辑的时候,发现一张图片用cvResize之后的像素值,和保存后的图片像素值不一样。
后来发现,原来是用cvSaveImage的时候,有第三个参数,会导致保存的图片像素值有误差,参考:http://www.cnblogs.com/wolfplan/p/4058851.html
这是我的部分代码:
IplImage *image=0,*imageresize=0;
//imageresize = cvLoadImage("save.jpg",1);
image=cvLoadImage("1.jpg",1);
if(!image) printf("can't load an image/n");
imageresize=cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,3);
cvResize(image,imageresize,CV_INTER_LINEAR);
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100; //这里是重点
p[2] = 0;
cvSaveImage("save2.jpg",imageresize, p);
//std::ofstream fileout("imgtest.txt");
printf("imageresize:%d\n", imageresize->imageSize);
std::cout<<imageresize->width<<","<<imageresize->height<<","<<imageresize->widthStep<<std::endl;
//int fd = open("img.txt", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU|S_IXGRP|S_IROTH|S_IXOTH);
size_t addr = 0x00;
//for(int y=0;y<imageresize->height;y++)
for (int y=0; y<1; y++)
{
unsigned char* p=(unsigned char*)(imageresize->imageData+y*imageresize->widthStep);
for (int x=0; x<imageresize->width*imageresize->nChannels; x+=3)
{
//get BGR:
//pwrite_bgr_16bits(p[x+2], p[x+1], p[x], fd, addr);
printf("(%d,%d,%d)", p[x+2], p[x+1], p[x]);
addr += 64;
}
//fileout<<p[x];
//fileout<<'\n';
}
后来发现,原来是用cvSaveImage的时候,有第三个参数,会导致保存的图片像素值有误差,参考:http://www.cnblogs.com/wolfplan/p/4058851.html
这是我的部分代码:
IplImage *image=0,*imageresize=0;
//imageresize = cvLoadImage("save.jpg",1);
image=cvLoadImage("1.jpg",1);
if(!image) printf("can't load an image/n");
imageresize=cvCreateImage(cvSize(224,224),IPL_DEPTH_8U,3);
cvResize(image,imageresize,CV_INTER_LINEAR);
int p[3];
p[0] = CV_IMWRITE_JPEG_QUALITY;
p[1] = 100; //这里是重点
p[2] = 0;
cvSaveImage("save2.jpg",imageresize, p);
//std::ofstream fileout("imgtest.txt");
printf("imageresize:%d\n", imageresize->imageSize);
std::cout<<imageresize->width<<","<<imageresize->height<<","<<imageresize->widthStep<<std::endl;
//int fd = open("img.txt", O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU|S_IXGRP|S_IROTH|S_IXOTH);
size_t addr = 0x00;
//for(int y=0;y<imageresize->height;y++)
for (int y=0; y<1; y++)
{
unsigned char* p=(unsigned char*)(imageresize->imageData+y*imageresize->widthStep);
for (int x=0; x<imageresize->width*imageresize->nChannels; x+=3)
{
//get BGR:
//pwrite_bgr_16bits(p[x+2], p[x+1], p[x], fd, addr);
printf("(%d,%d,%d)", p[x+2], p[x+1], p[x]);
addr += 64;
}
//fileout<<p[x];
//fileout<<'\n';
}
相关文章推荐
- Opencv读取图片像素值并保存为txt文件
- opencv中IplImage读取图片像素问题
- opencv保存png图片的压缩编码问题
- Android 玩转图片(读取图片转化Bitmap,保存本地,采样压缩)
- 图像图片批量读取并保存某一文件夹下图片的像素值
- Androidr的图片的缩放、读取、压缩保存
- opencv读取视频并保存为图片
- python 读取、保存、二值化、灰度化图片+opencv处理图片的方法
- opencv中批量读取图片并保存
- opencv批量读取图片批量保存图片
- OpenCV——读取、显示及保存图片
- Opencv 图像读取与保存问题
- OpenCV中C++函数imread读取图片的问题及解决方法
- OpenCV读取图片在MFC中显示的问题
- opencv cvLoadImage(mPath)通过打开文件读取图片,读不到图片问题
- OpenCV|OpenCV中C++函数imread读取图片的问题
- OpenCV【2】---读取png图片显示到QT label上的问题
- vs2013-opencv2.4.10-imread()读取图片问题
- SQL保存读取图片的问题
- Android对图片的压缩读取和保存