找回密码
 立即注册
收起左侧

一个关于QImage的问题

7
回复
9325
查看
[复制链接]
累计签到:21 天
连续签到:1 天
来源: 2018-4-10 18:32:11 显示全部楼层 |阅读模式
1Qter豆
我在做毕业设计,做一个jpg图片的嵌入水印和析出水印的过程。然后我是通过计算过后得到应该嵌入的像素点的数值,通过setPixel直接修改像素点的数值,这样的做法会不会存在问题?我的水印图片是一个黑白的,我得到像素点的qGray的值,然后将这张图变成二值图像。
在析出的时候,就是一个逆过程,得到原先的水印图片。在这里我先创建了一个新的QImage,格式设置为QImage::Format_RGB32,这样可以吗?得到水印像素点的值之后,比如说我得到的是1,那我就setpixel,rgb全部设置为255。
目前这样,我析出的水印图片跟原来相差很多,不懂原因

最佳答案

查看完整内容

关于qt的图片解码,应该说是有两个层次。第一层是在构造 QImage 或者 load() 的时候已经将不同的图片文件格式转换成平台无关的某种 Forma。这个层次的差异,如果你直接用 bits() 或者 scanLine() 之类的方法就需要注意。但如果用 setPixel() 、 pixel() 之类的方法,实际上是再进行了一层封装,把不同 Format 之间的差异也掩盖了,直接访问了特定的像素的颜色。 ...
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-4-10 18:32:12 显示全部楼层
关于qt的图片解码,应该说是有两个层次。第一层是在构造 QImage 或者 load() 的时候已经将不同的图片文件格式转换成平台无关的某种 Forma。这个层次的差异,如果你直接用 bits() 或者 scanLine() 之类的方法就需要注意。但如果用 setPixel() 、 pixel() 之类的方法,实际上是再进行了一层封装,把不同 Format 之间的差异也掩盖了,直接访问了特定的像素的颜色。
回复

使用道具 举报

累计签到:436 天
连续签到:1 天
2018-4-10 19:18:51 显示全部楼层
没太看明白你这个描述,你确定这个算法本身没有问题吗?
再有就是可能出问题的地方:
然后将这张图变成二值图像

如果是直接用convertToFormat() 到 QImage::Format_Mono 或者 QImage::Format_MonoLSB 多半是不正确的,qt在这里用的转换不是基于阈值分割的。
别的地方没看出什么明显的问题。
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
2018-4-11 08:42:10 显示全部楼层
miroox 发表于 2018-4-10 19:18
没太看明白你这个描述,你确定这个算法本身没有问题吗?
再有就是可能出问题的地方:

谢谢哈,我这里的二值图像其实就是指灰度只有0和255两种值的bmp图。读进来的水印图片不是一个全都这两种值的图,(可能有254 253这样的值)所以我做了一个处理,超过128的就把灰度改成255,反之就是0,然后再save,就是在原图直接进行修改,没有进行格式的转换
其实就是觉得挺神奇的,qt可以完全不考虑图片解码的问题,就将图片的像素点的值直接进行更改。昨晚我验算之后发现应该是在变换的过程中出了些数值上的问题,只能慢慢自己排查错误了。
就这个算法本身的话,看起来是没什么问题,其实就是对原来jpg图片的一些个像素点进行一些微调,将水印图片的像素点的灰度值通过一种线性变换嵌入到jpg的像素点的通道值里面而已,析出就是一个逆过程,通过这种线性变换的逆变换还原出来原来的灰度值
回复

使用道具 举报

累计签到:7 天
连续签到:1 天
2018-4-11 09:47:22 显示全部楼层
1.先了解图片原理;
2.图片怎么生成;
3.图片怎么操作.
不然就是简单调用,虽然可能成功.但是这是毕设.
没有做个这个功能,我猜应该是了解它的图片格式和数据的顺序格式,然后再在提取水印图片数据顺序,再逐一替换.
不排除直接就有Qt自带库实现了,或者其他第三方库实现了,也可以参考
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
2018-4-11 11:19:40 显示全部楼层
你才小清晰 发表于 2018-4-11 09:47
1.先了解图片原理;
2.图片怎么生成;
3.图片怎么操作.

对,目的应该就是这个,我现在是在想如果qt的api可以直接完成这个操作,我就没必要去找jpg、bmp图片的解码和生成的代码了,省下很多功夫。
目前是我的算法的变换里面出了纰漏,暂时还没发现qt的setPixel能不能适用,回头我直接改值试一下。
我的算法不是直接取rgb值进行修改的,还要变换之后才改,再变换回去。。。所以这中间挺多地方可能有问题的,谢谢啦
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2018-4-18 10:15:29 显示全部楼层
你图片显示用的什么 因为我也在做这块
回复

使用道具 举报

累计签到:21 天
连续签到:1 天
2018-4-19 08:26:48 显示全部楼层
一颗赛艇 发表于 2018-4-18 10:15
你图片显示用的什么 因为我也在做这块

label呀,图片转pixmap就可以显示了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了