在pyqt5中,使用Qimage显示相机的图像

在pyqt5中,使用Qimage显示相机的图像

前言:需要在pyqt5的软件界面上显示相机的图像,但是在CSDN上没有找到相关的方案。在翻阅资料后,写下查阅过程。
1、第一步,搞清相机返回的数据类型
相机返回数据类型
根据打印的数据,相机返回的是c_ubyte_Array。查询c_types的官方文档:
c_ubyte_Array数据类型
得知,是c的unsigned char数组。也就是说,一个char值表示一个像素点的灰度值。(因为unsigned char长度为0-255,可以代表0-255的灰度值)
2、搞清楚图像显示在控件中的语法
Qiamge使用方法
因此,做一个小实验:在一个图像中,使用字符a进行填充:

# 例:使用unchar类型的a,填充整幅图像
string1 = "a"* 40000
STR = (c_char * 40000)(*bytes(string1, 'utf-8'))  # 把一组100个的字符定义为STR,并转换为bytes类型
cast(STR, POINTER(c_char))  # 强制将STR转换为字符指针POINTER(c_char)
image = QImage(STR, 200, 200, QImage.Format_Indexed8)
self.label.setPixmap(QPixmap.fromImage(image))

结果,获取了一张灰度值为97的图像
灰度值为97的图像
证明了可行性。
或者使用最简单的方法:

image.fill((97)  # 直接全图显示为97的灰度图

也可以。
当然,可以显示为彩色:

image = QImage(200, 200, QImage.Format_RGB888)           # 创建对象
image.fill(QColor(235, 172, 75))                                             # 填充颜色
for i in range(0, 29):                                                             #使用setPixelColor,绘制直线
   image.setPixelColor(i, i, QColor(170, 0, 0))
self.label.setPixmap(QPixmap.fromImage(image))                    # 转化为QPixmap,并显示

显示彩色图片
实验完毕,在demo中进行验证:

im = BasicDemo.obj_cam_operation.buf_cache
width = BasicDemo.obj_cam_operation.st_frame_info.nWidth
height = BasicDemo.obj_cam_operation.st_frame_info.nHeight
format = BasicDemo.obj_cam_operation.st_frame_info.enPixelType
image = QImage(im, width, height, QImage.Format_Indexed8)
# 在主界面的label上显示相机图像
self.label.setPixmap(QPixmap.fromImage(image))

经测试,效果OK:
效果显示
附:其中涉及到的与c的数据转换
与c的转换

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值