解决Qpen鼠标随意画线时所画线像素不一致问题(实现onenote黄色画笔效果)

解决Qpen鼠标随意画线时所画线像素不一致问题(实现onenote黄色画笔效果)

问题背景:
Qpen在画线时,可以选择画笔颜色,即QColor,一般都是选择三个参数,即R,G,B,例如黑色可以设置为QColor(0,0,0),白色即为QColor(255,255,255)。用户可以根据自己的需要进行选择颜色。
这样的画笔进行画线时即使画的比较快也不会出现中间断断续续的情况,
下面是颜色为黄色的画线展示,即QColor(255,255,0),如图:

在这里插入图片描述
但是Qpen还有第四个参数,即设置画笔的透明度,这个范围也是0-255.其中数字越小,颜色越亮,也可以理解为越浅。
下面是画笔设为亮度为30的画线图,即QColor(255,255,0, 30)
在这里插入图片描述
我们可以看到画笔的颜色是比刚才浅的。
透明度越小,我们越能看到画笔下面的内容

代码示例

            pen = QPen(Qt.SolidLine)  #将画线设置为实线
            pen.setColor(QColor(255,255,0,30))   #设置画笔的颜色和透明度
            pen.setWidth(self.linewidth)    #设置画笔的宽度
            #根据鼠标位值进行随意画线,
            painter.drawLine(self.start_point, self.current_point)

想要达到的效果
想要达到画线后画线部分的像素值是稳定的,这样才方便后期的图像提取

问题分析
仅仅刚才的代码无法达到效果
当画线画的比较快时(即鼠标移动比较快时),会出现如下图情况:
在这里插入图片描述
显然我们直接用肉眼就可以看出来像素是不一样的。我们也可以进行像素查看,用下面代码:

import cv2
img = cv2.imread('image.jpg',1)

在这里插入图片描述
在这里插入图片描述
可以看出颜色会有较大波动,这并不是我们想要的结果

问题解决
最后解决这个问题的方式是同时让程序进行画线
即下面代码:

            pen = QPen(Qt.SolidLine)  #将画线设置为实线
            pen.setColor(QColor(255,255,0,30))   #设置画笔的颜色和透明度
            pen.setWidth(self.linewidth)    #设置画笔的宽度
            #根据鼠标位值进行随意画线,
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)
            painter.drawLine(self.start_point, self.current_point)

然后再次尝试快速画线:
在这里插入图片描述
可以很明显的看到此时达到了颜色均匀的需求,并且是透明的实线

此时我们再次进行像素读取:
在这里插入图片描述
我们通过opencv进行读取,发现确实是一样的,至此我们就完成了需求。
但是这个原理我并不明白,望大佬不吝赐教

其实用过onenote的小伙伴应该知道,onenote上面的那个黄色的画笔和刚才实现的效果是一样的

——————————————————————————————
更新
今天又发现了另外一种导致像素不一致的原因;
例如用像素(0,255,255)的画笔在.tif格式上的图片画线后,如果将画线后的图片保存为.jpg,然后读取图片的像素值发现会有一些像素差,变成了(3,254,255),其他颜色也是这样。所以推测图片间的格式转换会导致像素微变。目前还不确定,待以后进一步学习

  • 22
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值