怎么讲sd卡里的图片显示在LCD上呢?
@kidswong999 就是将sd卡里的图片显示到lcd上,但是没有反应,
代码就是那样的
169行之后有点小bug,关于一点串口发协议进行多次识别,求助一下大佬(标题写不了呢么长,具体一点在内容里面)
我想着是 识别二维码 当识别到的时候将一个数组的第三位改变,判断 改变了之后跳出循环,当没识别到的时候numbb一直自减,但是现在没有识别到的时候他numbb会一直减到0才停止,并且在numbb自减的时候摄像头会一直卡住在某一帧的图像(或者有没有什么办法能 又避免卡住摄像头的同时 又能在没有识别到东西的时候进行再次识别,{功能:识别到了之后跳出,没识别到的时候可以转动摄像头调整角度同时识别,规定时间内还是没有识别到时候跳出防止程序卡死})
import sensor, image,time,lcd
from pyb import UART,Timer,LED
sensor.reset()#初始化摄像头
print("初始化摄像头成功")
sensor.set_pixformat(sensor.RGB565)#设置格式,RGB565为彩图
print("初始化格式成功")
sensor.set_framesize(sensor.QVGA)#设置图像像素大小
print("初始化图像类型成功")
#sensor.skip_frames(time = 1000)#里面如果是数字就是跳过几帧,如果是time=1000就是跳过1s的帧数
print("初始化跳帧成功")
sensor.set_auto_whitebal(False)#关闭白平衡
print("关闭白平衡")
sensor.set_auto_gain(False)#关闭自动增益
print("关闭自动增益")
clock = time.clock()#记录帧数
print("记录帧数")
lcd.init()#初始化附带的lcd屏幕
print("初始化lcd屏幕成功")
uart = UART(3,115200,8,None,1)#初始化串口
print("初始化串口成功") #初始化
#===================================================================================================
#交通灯的阈值(经过曝光处理)
red_threshold_01 = (29, 100, 38, 96, 20, 63)
green_threshold_01 = (29, 91, -128, -18, 19, 46)
yellow_threshold_01 = (34, 100, -31, 42, 48, 84)
green_yuzhi=(28, 94, -128, -16, 2, 46)
#阈值
#===================================================================================================
data = []#一个列表
runData = [0x55,0x02,0x92,0x03,0x02,0x00,0x00,0xBB]
if_Check = [0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xBB] #返回的协议
#===================================================================================================
#串口发送函数
def Send(src,length):
for i in range(length):
uart.writechar(src[i]) #串口发送函数
#===================================================================================================
def find_max(blobs): #定义寻找色块面积最大的函数
max_size=0
for blob in blobs:
if blob.pixels() > max_size:
max_blob=blob
max_size = blob.pixels()
return max_blob #寻找面积最大的色块(暂时没用)
#===================================================================================================
def ceshi():
print("ceshi key")
uart.writechar(0x55)
#测试用
#===================================================================================================
#交通灯的核对
def traffic_Check():
#numbb=2000
sensor.set_auto_exposure(False, 800)#这里设置曝光时间
#while(numbb!=0):
#print (numbb)
#if(if_Check[3]!=0x00):
#if_Check.insert(3,0x00)
#numbb=0
#break
blobs = img.find_blobs([red_threshold_01], merge=True, margin=2); #红色物块
blobs1 = img.find_blobs([green_yuzhi], merge=True, margin=2); #绿色物块
blobs2 = img.find_blobs([yellow_threshold_01], merge=True, margin=2); #蓝色物块
if blobs1:
#如果找到了目标lv色
print("绿色")
if_Check.insert(3,0x02)
uart.writechar(0x55)
uart.writechar(0x02)
uart.writechar(0x02)
uart.writechar(0x03)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x04)
uart.writechar(0xBB)
elif blobs2:
print("huang色")
if_Check.insert(3,0x03)
uart.writechar(0x55)
uart.writechar(0x02)
uart.writechar(0x02)
uart.writechar(0x02)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x05)
uart.writechar(0xBB)
elif blobs:
#如果找到了目标红色
print("hong色")
if_Check.insert(3,0x01)
uart.writechar(0x55)
uart.writechar(0x02)
uart.writechar(0x02)
uart.writechar(0x01)
uart.writechar(0x00)
uart.writechar(0x00)
uart.writechar(0x03)
uart.writechar(0xBB)
else :
Send(if_Check,8)
#numbb=numbb-1 #交通灯识别函数
#===================================================================================================
def Color_Check():
for code in img.find_qrcodes():
qr_message = code.payload()
print(qr_message)
if_Check.insert(3,0x04)
uart.writechar(0x55)
uart.writechar(0x02)
uart.writechar(0x92)
uart.writechar(0x01)
uart.writechar(len(qr_message))
for qrdata in qr_message:
uart.writechar(ord(qrdata))
uart.writechar(0xBB)
#===================================================================================================
#55 02 91 01 00 00 00 BB 交通灯识别串口协议
#55 02 92 01 00 00 00 BB 二维码识别串口协议
print("准备初始化系统")
while(True):
img = sensor.snapshot().lens_corr(1.8)
if(uart.any()):
print("串口连接成功,准备打印串口传输内容")
data = uart.read(8)
print(data)#调试串口输入
if( len(data) >= 8):
if((data[0] == 0x55)and(data[1] == 0x02)and(data[7] == 0xBB)):
print("协议初始化成功")
if(data[2] == 0x91):
print("识别交通灯")
if(data[3] == 0x01):
print("开始识别交通灯")
while(numbb!=0):
print (numbb)
#当第三位有数据的时候跳出循环
if(if_Check[3]!=0x00):
if_Check.insert(3,0x00)
numbb=0
break
#识别交通灯函数
traffic_Check()
if(data[2] == 0x92):
print("识别二维码")
if(data[3] == 0x01 ):
print("开始识别二维码")
sensor.set_auto_exposure(True)#这里设置曝光时间
print(sensor.get_exposure_us())
numbb=2000
while(numbb!=0):
print (numbb)
#当第三位有数据的时候跳出循环
if(if_Check[3]!=0x00):
if_Check.insert(3,0x00)
numbb=0
break
else:
numbb=numbb-1
#识别二维码函数
Color_Check()
请在这里粘贴代码
低功耗模式下彻底关闭屏幕背光问题。
因为这个LCD当时设计的时候没有考虑低功耗的问题。所以需要魔改一下。
代码:
主要是设置成推挽输出,不启动芯片内部拉电阻。
import sensor, image, lcd
import time
import pyb
sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # or sensor.GRAYSCALE
sensor.set_framesize(sensor.QQVGA2) # Special 128x160 framesize for LCD Shield.
lcd.init() # Initialize the lcd screen.
import time
from pyb import Pin, Timer
lcd_backlight = pin=Pin("P6", Pin.OUT_PP, pull=Pin.PULL_NONE)
lcd_backlight.value(1) #light
for i in range(100):
lcd.display(sensor.snapshot()) # Take a picture and display the image.
pyb.standby()
while(True):
lcd.display(sensor.snapshot()) # Take a picture and display the image.
处理速度
连接上LCD后LCD上图像很卡,卡顿很厉害,帧率有点低怎么办啊
openmv可以通过UART3口传输图像数据给stm32,然后通过stm32的lcd屏进行显示吗
没意义的,串口太慢。
OpenMV直接用配套的lcd就行。https://singtown.com/product/636/opeenmv-lcd-shield/
LCD扩展屏使用时是否无法再使用PIN口检测输入?
对,LCD扩展板已经用到的引脚 就不能再用了
openmv中如何利用已有的一张JPG照片创建一个image类的对象?
不行的,OpenMV没有jpeg的解码器的。实现不了的。
可以读入bmp的二进制。
openmvMV4 H7的10个IO口都可当作普通IO作为输入和输出脚??LCD屏自己外接能在10 IO口随便选择??
如果没有冲突,10个IO都可以当作IO。
LCD引脚是固定死的:如果使用了LCD,那么这些引脚就不能作为IO。
https://singtown.com/product/636/opeenmv-lcd-shield/
openmv目标检测
//放弃吧,坑很大,至少OpenMV 很困难。
这个问题比你想象的要困难得多,如果只是查找色块,二维码,看统计信息,那可以完成。
分类(尤其是识别位置)香蕉苹果,如果你要直接查找色块(香蕉-黄色,苹果-红色),很简单,如果真的想找香蕉,非常困难,CNN神经网络还需要很大的努力。