今天我去学校并向老师展示了这个活动,但他并不理解和惊讶。
对于“1.jpg”,首先我向右移动红色,绿色,蓝色值并打印此值。在我向左移动所有这些值之后,以及在创建新图片之后。“2.jpg”(所以相同的图片)
最后我看了两张照片并比较了这些。这些看起来像彼此但这些不一样。我检查了比较这些。
edgetag* e = (edgetag*)malloc(sizeof(edgetag)); //SEGMENTATION FAULT SEEMS TO LIE HERE
答案 0 :(得分:2)
JPEG通常是“有损”格式(取决于选项)。这意味着源RGB值在存储时不会再现完全。您可以设置jpeg写入的选项是无损的,但这会增加文件大小,并且首先会失败使用jpeg的目的。
我的猜测是,如果您要为BMP文件或任何无损格式尝试相同的代码,图像将完全相同。
加载压缩图像然后将其写回压缩格式的事实会引入“副本副本”问题。你的原始图像已经有损了。您已加载它,然后再次启用压缩将其保存。每次完成此操作时,都会丢失一些原始信息。
类似于拍摄照片。每次完成此操作,您将丢失信息。
答案 1 :(得分:0)
JPEG压缩过程中有几个步骤可以更改输入。
彩色图像从RGB转换为YCbCr。两种颜色系统之间没有1:1匹配,因此可以剪切值。
DCT是对整数值执行的浮点运算。这会导致舍入差异(通常最多+/- 1)。
量化过程对DCT系数执行整数除法,将多个变为0并将其他值中的分数减去。
结果是一张图片很少出现。