当前位置:首页 > 其他 > 正文内容

《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图画比照试验

邻居的猫1个月前 (12-09)其他563

第三十七章 image图画比照试验

1)试验渠道:正点原子DNK210开发板

2)章节摘自【正点原子】DNK210运用指南 - CanMV版 V1.0

3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750

4)全套试验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)正点原子K210技术交流企鹅群:605557868

在上一章节中,介绍了image模块中图画色块追寻办法给的运用,本章将持续介绍image模块中图画比照办法的运用。通过本章的学习,读者将学习到image模块中图画比照的运用。
本章分为如下几个末节:
37.1 image模块图画比照办法介绍
37.2 硬件规划
37.3 程序规划
37.4 运转验证

37.1 image模块图画比照办法介绍
image模块为Image目标供给了difference()办法,用于核算两个图画的差值绝对值,difference()办法如下所示:

image.difference(image, mask)

difference()办法核算两个图画的差值的绝对值,并回来一个image目标,回来的图画中较暗的部分,即两个比照图画不同不大的部分,回来图画中较亮的部分,即两个比照图画中相差较大的部分。
image指的是与image目标比较的另一个image目标。
mask指的是另一个用作绘图操作的像素级掩码的图画,掩码应该是一个只要黑色和白色像素的图画,而且因该与所处理的Image目标具有相同的巨细,仅有掩码中设置的像素会被修正。
difference()办法会回来通过处理的Image目标。
difference()办法的运用示例如下所示:

import image
img1 = image.Image(size=(320, 240))
img2 = img1.copy()
img1.difference(img2)

image模块为Image目标供给了get_similarity()办法,用于核算两个图画之间的类似程度,get_similarity()办法如下所示:

image.get_similaraity(image)

get_similarity()办法用于运用SSIM算法核算两个图画之间的8*8像素色块的类似度,并会回来一个similarity目标。
image指的是与image目标进行核算的另一个image目标。
get_similarity()办法会回来一个similarity目标。
get_similarity()办法的运用示例如下所示:

import image
img1 = image.Image(size=(320, 240))
img2 = img1.copy()
sim = img1.get_similarity(img2)

37.2 硬件规划

37.2.1 例程功用

  1. 不断地获取摄像头输出的图画,并保存相邻的两帧图画,对这两帧图画运用差帧算法或SSIM算法进行图画比照,并将比照成果和当时获取到的摄像头图画一同在LCD上进行显现。
  2. KEY0按键可以切换图画比照时运用的算法。

37.2.2 硬件资源
本章试验内容,首要解说image模块的运用,无需重视硬件资源。

37.2.3 原理图
本章试验内容,首要解说image模块的运用,无需重视原理图。

37.3 程序规划

37.3.1 image模块图画比照办法介绍
有关image模块图画比照办法的介绍,请见第37.1末节《image模块图画比照办法介绍》。

37.3.2 程序流程图

图37.3.2.1image图画比照试验流程图

37.3.3 main.py代码
main.py中的脚本代码如下所示:

from board import board_info
from fpioa_manager import fm
from maix import GPIO
import time
import lcd
import sensor
import image
import gc
lcd.init()
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.RGB565)
sensor.set_hmirror(False)
type = 0
type_dict = {
    0: "Normal",
    1: "Frame",
    2: "SSIM"
}
fm.register(board_info.KEY0, fm.fpioa.GPIOHS0)
key0 = GPIO(GPIO.GPIOHS0, GPIO.IN, GPIO.PULL_UP)
def key_irq_handler(key):
    global key0
    global type
   time.sleep_ms(20)
    if key is key0 and key.value() == 0:
       type = type + 1
       if type == len(type_dict):
           type = 0
key0.irq(key_irq_handler, GPIO.IRQ_FALLING, GPIO.WAKEUP_NOT_SUPPORT, 7)
while True:
    img= sensor.snapshot()
    if type == 0:
       # 原图
       pass
    elif type == 1:
       # 差帧算法
       threshold = 5
       if "prev" not in dir():
           prev = img.copy()
       prev.difference(img)
       hist = prev.histogram()
       diff = hist.get_percentile(0.99).l_value() - hist.get_percentile(0.90).l_value()
       img.draw_string(10, 30, "Different" if diff > threshold else "Same", color=(255, 0, 0), scale=1.6)
       prev = img.copy()
    elif type == 2:
       # SSIM算法
       threshold = -0.4
       if "prev" not in dir():
           prev = img.copy()
       sim = prev.get_similarity(img)
       img.draw_string(10, 30, "Different" if sim.min() < threshold else "Same", color=(255, 0, 0), scale=1.6)
    else:
       type = 0
    img.draw_string(10, 10, type_dict[type], color=(255, 0, 0), scale=1.6)
    lcd.display(img)
    gc.collect()

可以看到一开端是先初始化了LCD、摄像头和中止按键,而且按下中止按键可以切换图画比照时运用的比照算法。
接着在一个循环中不断地获取摄像头输出的图画,由于获取到的图画便是Image目标,因而可以直接调用image模块为Image目标供给的各种办法,然后便是对当时图画与上一帧图画进行图画比照,最终在LCD显现图画以及图画比照成果。

37.4 运转验证
将DNK210开发板衔接CanMV IDE,点击CanMV IDE上的“开端(运转脚本)”按钮后,按下KEY0按键可以切换图画比照时运用的比照算法,图画比照完成后会在LCD上显现比照成果,假如前后两帧图画类似度较高,则LCD上显现“Same”,假如前后两帧图画有点差异,则LCD上显现“Different”。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=708

分享给朋友:

“《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图画比照试验” 的相关文章

Playfair暗码

Playfair暗码

Playfair暗码 Playfair cipher (普莱费尔暗码)一种古典对称式暗码,是首个双字母替换的加密法。虽然以现在的眼光来看这种加密是十分不安全的,可是它加密的进程仍是蛮有意思的。 这种加密办法所需求的就只有一张\(5 \times 5\)的表格,比如说像这样: 1 2 3 4 5 E...

助力海外,空壳支撑Google Play使用兼顾

助力海外,空壳支撑Google Play使用兼顾

空壳 V2.2 ,支撑从 Google Play 下载的使用兼顾! 出海的你或许需求一起办理多个交际或作业账号。空壳 为你供给完美的多账号解决方案,让你能够多账号一起在线,无需来回切换,操作快捷高效。无论是个人日子,仍是事务拓宽,都能称心如意。 空壳 支撑 Google Play 官方使用的兼顾...

unity .net8 suppot comming

unity .net8 suppot comming

Hello everyone, 我们好, With the summer holidays upon us, It’s been a while since my last update, so I wanted to share some progress on our .NET Moderniz...

【出资认知】- 2024Q1的英伟达NVIDIA

【出资认知】- 2024Q1的英伟达NVIDIA

来历:https://twitter.com/ZeevyInvesting/status/1801691822705512947 名词解释 CAGR:复合年增加率(Compound Annual Growth Rate) LTM Gross margin:曩昔 12 个月的毛利率,LTM Gros...

开源表单系统,简化数据收集,提升工作效率

开源表单系统,简化数据收集,提升工作效率

1. tduckplatform 简介:tduckplatform 是一款免费的表单问卷系统,支持快速创建问卷或业务表单,采用无代码理念,用户可以通过拖拽的方式创建问卷表单。它采用 SpringBoot Vue ElementUI 技术栈,功能强大且界面清新,支持一键部署。 特点...

区块链未来发展前景,区块链未来发展趋势与前景展望

区块链未来发展前景,区块链未来发展趋势与前景展望

区块链技术作为一种分布式账本技术,近年来在全球范围内得到了广泛的关注和应用。它具有去中心化、不可篡改、可追溯等特点,被认为在多个领域具有巨大的应用潜力。以下是对区块链未来前景的几点分析:1. 金融领域:区块链技术最初在金融领域得到应用,如比特币等数字货币的发行和交易。未来,区块链有望在支付、清算、结...