如何在Kivy布局中显示OpenCV处理后的图像及直方图等绘图结果
实现思路与具体方案
一、OpenCV处理后图像接入Kivy的方法
Kivy的Image组件无法直接接收OpenCV输出的numpy数组,你不需要把处理后的图存到本地再读取,直接在内存中做格式转换即可,步骤如下:
- 首先在kv文件中定义好用来展示处理后图像的
Image组件,只需指定id不用填source参数:
Image: id: processed_img
- OpenCV默认输出的是BGR通道格式的数组,需要先转成Kivy要求的RGB格式:二值/灰度图用
cv.COLOR_GRAY2RGB转换,彩色图用cv.COLOR_BGR2RGB转换。 - 把转换后的数组转成Kivy的纹理对象,再赋值给
Image的texture属性即可,注意要做垂直翻转适配两个框架的坐标原点差异。
示例代码:
import cv2 as cv from kivy.graphics.texture import Texture # 你的阈值处理逻辑得到thresh_inverse threshold, thresh_inverse = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV) # 格式转换 if len(thresh_inverse.shape) == 2: # 灰度/二值图转RGB img_rgb = cv.cvtColor(thresh_inverse, cv.COLOR_GRAY2RGB) else: # 彩色BGR转RGB img_rgb = cv.cvtColor(thresh_inverse, cv.COLOR_BGR2RGB) # 创建对应尺寸的纹理 texture = Texture.create(size=(img_rgb.shape[1], img_rgb.shape[0])) # 填充纹理数据,[::-1]是垂直翻转适配坐标 texture.blit_buffer(img_rgb[::-1].tobytes(), colorfmt='rgb', bufferfmt='ubyte') # 赋值给kv中定义的Image组件 self.ids.processed_img.texture = texture
二、Matplotlib绘图接入Kivy的方法
matplotlib的绘图同样可以不用存本地,直接转成像素数组后复用上面的纹理转换逻辑即可,plt.show()是桌面端窗口API,安卓环境下不要调用。
示例代码(接你写的直方图生成逻辑):
import numpy as np import matplotlib.pyplot as plt from kivy.graphics.texture import Texture # 你的直方图绘制逻辑执行完成后 for i, col in enumerate(colors): hist = cv.calcHist([img], [i], None, [256], [0,256 ]) plt.plot(hist,color=col) plt.xlim([0,256]) # 拿当前绘图对象,强制渲染画布 fig = plt.gcf() fig.canvas.draw() # 从画布读取像素数组 img_data = np.frombuffer(fig.canvas.tostring_rgb(), dtype=np.uint8) img_data = img_data.reshape(fig.canvas.get_width_height()[::-1] + (3,)) # 复用和OpenCV图一样的纹理转换逻辑 texture = Texture.create(size=(img_data.shape[1], img_data.shape[0])) texture.blit_buffer(img_data[::-1].tobytes(), colorfmt='rgb', bufferfmt='ubyte') # 赋值给专门展示直方图的Image组件 self.ids.hist_img.texture = texture # 用完关闭绘图释放内存,避免泄漏 plt.close()
三、安卓端适配注意事项
- 完全删除所有
cv.imshow、plt.show调用,这类桌面端窗口API在安卓环境无法运行。 - 读取本地图片不要用Windows格式的绝对路径,安卓端可以用Kivy提供的
App.get_running_app().user_data_dir获取应用私有目录路径来读写文件。 - 如果需要读取系统相册的图片,要在打包配置(比如buildozer.spec)中声明存储读取权限。
内容的提问来源于stack exchange,提问作者ShibaInu
相关产品推荐
相关产品推荐

