完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在linux下读取USB摄像头的数据,最终输出一张JPG图出来,但是读取出来的图片失真。用的是jpeglib的接口进行的转换,我想请问到底哪一步出错了。 //rgb转jpg int save_jpg(unsigned char *pdata, FILE *jpg_file, int width, int height) { //分别为RGB数据,要保存的jpg文件名,图片长宽 int depth = 3; JSAMPROW row_pointer[1];//指向一行图像数据的指针 struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr);//要首先初始化错误信息 //* Now we can initialize the JPEG compression object. jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, jpg_file); cinfo.image_width = width; //* image width and height, in pixels cinfo.image_height = height; cinfo.input_components = depth; //* # of color components per pixel cinfo.in_color_space = JCS_RGB; //* colorspace of input image jpeg_set_defaults(&cinfo); jpeg_set_quality(&cinfo, 100, TRUE ); //* limit to baseline-JPEG values jpeg_start_compress(&cinfo, TRUE); int row_stride = width * 3; while (cinfo.next_scanline < cinfo.image_height) { row_pointer[0] = (JSAMPROW)(pdata + cinfo.next_scanline * row_stride);//一行一行数据的传,jpeg为大端数据格式 jpeg_write_scanlines(&cinfo, row_pointer, 1); } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo);//这几个函数都是固定流程 fclose(jpg_file); return 0; } //yuv转rgb void yuyv422toABGRY(unsigned char *src) { int width=0; int height=0; width = IMG_WIDTH; height = IMG_HEIGHT; int frameSize =width*height*2; int i; if((!rgb || !ybuf)){ return; } int *lrgb = NULL; int *lybuf = NULL; lrgb = &rgb[0]; lybuf = &ybuf[0]; if(yuv_tbl_ready==0){ for(i=0 ; i<256 ; i++){ y1192_tbl = 1192*(i-16); if(y1192_tbl<0){ y1192_tbl=0; } v1634_tbl = 1634*(i-128); v833_tbl = 833*(i-128); u400_tbl = 400*(i-128); u2066_tbl = 2066*(i-128); } yuv_tbl_ready=1; } for(i=0 ; i unsigned char y1, y2, u, v; y1 = src; u = src[i+1]; y2 = src[i+2]; v = src[i+3]; int y1192_1=y1192_tbl[y1]; int r1 = (y1192_1 + v1634_tbl[v])>>10; int g1 = (y1192_1 - v833_tbl[v] - u400_tbl)>>10; int b1 = (y1192_1 + u2066_tbl)>>10; int y1192_2=y1192_tbl[y2]; int r2 = (y1192_2 + v1634_tbl[v])>>10; int g2 = (y1192_2 - v833_tbl[v] - u400_tbl)>>10; int b2 = (y1192_2 + u2066_tbl)>>10; r1 = r1>255 ? 255 : r1<0 ? 0 : r1; g1 = g1>255 ? 255 : g1<0 ? 0 : g1; b1 = b1>255 ? 255 : b1<0 ? 0 : b1; r2 = r2>255 ? 255 : r2<0 ? 0 : r2; g2 = g2>255 ? 255 : g2<0 ? 0 : g2; b2 = b2>255 ? 255 : b2<0 ? 0 : b2; *lrgb++ = 0xff000000 | b1<<16 | g1<<8 | r1; *lrgb++ = 0xff000000 | b2<<16 | g2<<8 | r2; if(lybuf!=NULL){ *lybuf++ = y1; *lybuf++ = y2; } } } |
|
相关推荐
2个回答
|
|
帮忙顶一下,坐等大佬解答
|
|
|
|
照片居然没上传上去。。。。转换完成的照片我大概形容一下,就是我拍自己的脸,结果转换成JPG用电脑看是重影那种的,有三个脸。我是在linux下转换完成后传输到电脑端查看的。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之编写程序
121 浏览 0 评论
RK3568国产处理器_教学实验箱_操作教程:1-22 密码学编程实验
241 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-运动追踪之六轴传感器icm20607介绍
441 浏览 0 评论
FacenetPytorch人脸识别方案--基于米尔全志T527开发板
1691 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
1116 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:41 , Processed in 1.201116 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号