星瞳实验室APP,快速收到回复
  • 我们只解决官方正版的OpenMV的问题(STM32),其他的分支有很多兼容问题,我们无法解决。
  • 如果有产品硬件故障问题,比如无法开机,论坛很难解决。可以直接找售后维修
  • 发帖子之前,请确认看过所有的视频教程,https://singtown.com/learn/ 和所有的上手教程http://book.openmv.cc/
  • 每一个新的提问,单独发一个新帖子
  • 帖子需要目的,你要做什么?
  • 如果涉及代码,需要报错提示全部代码文本,请注意不要贴代码图片
  • 必看:玩转星瞳论坛了解一下图片上传,代码格式等问题。
  • 为什么模板匹配 我打印t 是一堆数字 按官方的应该是我的文件名



    • import time, sensor, image,pyb
      from image import SEARCH_EX, SEARCH_DS
      from pyb import UART
      import ustruct
      from pyb import LED
      one=LED(1)
      #从imgae模块引入SEARCH_EX和SEARCH_DS。使用from import仅仅引入SEARCH_EX,
      #SEARCH_DS两个需要的部分,而不把image模块全部引入。
      clock = time.clock()
      # Reset sensor
      sensor.reset()
      
      # Set sensor settings
      sensor.set_contrast(1)      #设置对比度
      sensor.set_gainceiling(16)  #设定增益曲线
      sensor.set_framesize(sensor.QQVGA)
      sensor.set_pixformat(sensor.GRAYSCALE)
      #串口3定义
      uart1 = UART(3,115200)   #定义串口3变量
      uart1.init(115200, bits=8, parity=None, stop=1) # init with given parameters
      
      
      
      
      def sending_data(cx,cy):
          global uart1;
          #frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
          #data = bytearray(frame)
          datasum=ustruct.pack("<bbhhhhb",      #格式为俩个字符俩个短整型(2字节)
                          0x2C,                      #帧头1
                          0x12,                      #帧头2
                          int(cx), # up sample by 4   #数据1
                          int(cy), # up sample by 4   #数据1
                          0x5B)
      
          uart1.write(datasum);   #必须要传入一个字节数组
          
      
      #初始模板
      templatedemo = ["/1.pgm", "/2.pgm", "/3.pgm", "/4.pgm","/5.pgm", "/6.pgm", "/7.pgm", "/8.pgm"]
      ##分类模板
      templates = (["/3.pgm", "/32.pgm", "/33.pgm", "/34.pgm","/35.pgm", "/36.pgm"],
                  ["/4.pgm", "/42.pgm", "/43.pgm", "/44.pgm","/45.pgm", "/46.pgm"],
                  ["/5.pgm", "/52.pgm", "/53.pgm", "/54.pgm","/55.pgm", "/56.pgm"],
                  ["/6.pgm", "/62.pgm", "/63.pgm", "/64.pgm","/65.pgm", "/66.pgm"],
                  ["/7.pgm", "/72.pgm", "/73.pgm","/74.pgm","/75.pgm", "/76.pgm","/701.pgm","/702.pgm","/703.pgm","/704.pgm","/705.pgm","/706.pgm"],
                  ["/8.pgm","/82.pgm", "/83.pgm", "/84.pgm","/85.pgm", "/86.pgm","/801.pgm","/802.pgm","/803.pgm","/804.pgm","/805.pgm","/806.pgm"]) #8\
      
      imgarray=[0,0,0,0,0,0,0,0]
      imgarrays=[0,0,0,0,0,0,0,0,0,0,0,0]
      
      first=0
      cx=0
      cy=0
      
      def get_first(img):#病房号识别输入 返回一到八 判断初始模板
          #print("get_first")
          global imgarray
          r = img.find_template(imgarray[0], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 1
          r = img.find_template(imgarray[1], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 2
          r = img.find_template(imgarray[2], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 3
          r = img.find_template(imgarray[3], 0.7 ,step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 4
          r = img.find_template(imgarray[4], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 5
          r = img.find_template(imgarray[5], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 6
          r = img.find_template(imgarray[6], 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 7
          r = img.find_template(imgarray[7], 0.7, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
          if r:
              img.draw_rectangle(r)
              return 8
          return 0
      
      
      '''def isget(num):#判断是否输入成功
          if num is not 0:
              for i in range (num):
                  one.on()
                  print(num) #使用时删除 给自己看的
                  time.sleep_ms(100)
                  one.off()
                  time.sleep_ms(100)
                  cx = num'''
      
      
      
      def getimgs(imgarr):
          i=0
          #print("getimgs")
          for t in imgarr:
              imgarrays[i]=image.Image((t))
              #print(imgarrays[i])
              i+=1
          return imgarrays
      
      def match_img(photos,img):#模板匹配
          isget=0
          #print("match_img")
          for t in photos:
              print("tt",t)
              r = img.find_template(t, 0.50, step=4, search=SEARCH_EX)#不能将int转换为type
             
              if r:
                  img.draw_rectangle(r)
                  isget=1
                 
                  break
              else:
                  pass
          if isget==1:
              sending_data(0x37,0x12) #55
              isget=0
          else:
              sending_data(0x73,0x21)  #115
      
      def loadimg():  #导入正常图片八张
          #print("loading")
          i=0
          for t in templatedemo:
              imgarray[i]=image.Image(str(t))
              i+=1
          return imgarray
      
      
      imgarray=loadimg()  #加载初始八张图
      
      
      while (True):
          clock.tick()
          img = sensor.snapshot()
          if imgarrays[0]!=0:
              match_img(imgarrays,img)#比对当前帧图片与加载进来的模板库匹配
              '''cy=int(img)'''
              print("y:",cy)
          else:
              if first==0:  #获取初始图片标志位
                  first=get_first(img)  #first用于判断当前是那张图片
                  if first is not 0:
                      for i in range (first):
                          one.on()
                          print(first) #使用时删除 给自己看的
                          time.sleep_ms(100)
                          one.off()
                          time.sleep_ms(100)
                          cx = first#亮灯提醒是否识别到初始图片
                          print("1:",cx)
              elif first==1:
                  sending_data(0x10) # 确定是1
              elif first==2:
                  sending_data(0x20) #确定是2
              elif imgarrays[0]==0:  #确定图片缓冲区第一次是空
                  imgarrays=getimgs(templates[first-3])#load photo 加载图片 执行一次
              else:#之后程序只会在这里执行
                  pass
         
          FH = bytearray([0x2C,0x12,cx,cy,0x5B])
          print("6:",cx)
          uart1.write(FH)
          print("FPS:",clock.fps())#帧率显示
      
      

      print(t)的值:tt {"w":70, "h":96, "type"="grayscale", "size":6720}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":68, "type"="grayscale", "size":4080}
      tt {"w":60, "h":65, "type"="grayscale", "size":3900}
      tt {"w":60, "h":48, "type"="grayscale", "size":2880}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}
      tt {"w":60, "h":47, "type"="grayscale", "size":2820}
      tt {"w":60, "h":53, "type"="grayscale", "size":3180}



    • 我的模板匹配为什么打印的是这个。 我目的是为了得到这个扫描到模板的文件名 然后写它在列表的哪个位置 现在它怎么打印这些东西



    • 你的photos是图片数组,不是字符串数组。



    • @kidswong999 那请问 我该怎么样才能得到一个参数 让它输出的是这个扫描到的数字号 现在我只能知道它是否扫到 。不知道是数字几 传输不出去