for(Object obj : objs) 解释

本文详细介绍了如何在Java中使用增强型for循环遍历各种类型的集合,包括实现了Iterable接口的类和数组。探讨了其实现机制,并解释了底层可能采用的不同技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

obj 是 Object 的一个实例对象,

整句话的意思就是,for循环objs集合,这个集合,里面的对象类型是Object,取出col集合中的每个Object对象,实例化成obj小对象。然后就可以直接操作objs中的这些Object类型的对象了。


for(Object obj : objs) 可以用在任何实现了 Iterable 接口的类上,这个接口规定它的实现一定要有一个方法返回一个迭代器

public Iterator<E> iterator();

但是所有的 array 也能使用 foreach 循环,array 应该是没有迭代器的,所以 foreach 循环可以用在任何 array 或者任何 Iterable 类型。

其底层实现应该是不一样的

Iterable<E> 的 foreach 底层实现可能是用了迭代器
array 的 foreach 底层实现可能是直接用了指针


from maix import camera, display, image, nn, app, comm, uart, pinmap, time import struct, os #定义全局变量 devices = [] # 设置UART1引脚映射 pinmap.set_pin_function("A18", "UART1_RX") # 设置UART1接收引脚 pinmap.set_pin_function("A19", "UART1_TX") # 设置UART1发送引脚 # 初始化串口通信 device = "/dev/ttyS1" # UART1设备路径 uart1 = uart.UART(device, 115200) # 配置UART1,波特率115200 report_on = True APP_CMD_DETECT_RES = 0x02 def encode_objs(objs): ''' encode objs info to bytes body for protocol 2B x(LE) + 2B y(LE) + 2B w(LE) + 2B h(LE) + 2B idx + 4B score(float) ... ''' body = b'' for obj in objs: body += struct.pack("<hhHHHf", obj.x, obj.y, obj.w, obj.h, obj.class_id, obj.score) return body def build_packet(packet_id): packet = bytearray(28) packet[0] = 0x40 packet[1] = packet_id packet[27] = 0x5D return packet model_path = "model_222554.mud" if not os.path.exists(model_path): model_path = "/root/视觉_01/model_222554.mud" detector = nn.YOLOv5(model=model_path) cam = camera.Camera(detector.input_width(), detector.input_height(), detector.input_format()) dis = display.Display() p = comm.CommProtocol(buff_size = 1024) while not app.need_exit(): # msg = p.get_msg() img = cam.read() objs = detector.detect(img, conf_th = 0.5, iou_th = 0.45) if len(objs) > 0 and report_on: body = encode_objs(objs) p.report(APP_CMD_DETECT_RES, body) for obj in objs: img.draw_rect(obj.x, obj.y, obj.w, obj.h, color = image.COLOR_RED) msg = f'{detector.labels[obj.class_id]}: {obj.score:.2f}' img.draw_string(obj.x, obj.y, msg, color = image.COLOR_RED) # 获取目标名称 object_name = detector.labels[obj.class_id] object_score = obj.score print(object_name, object_score) if object_score > 0.85: packet = build_packet(0x01) uart_data = bytes(bytes(packet)) # 发送目标名称而不是类别ID value_bytes = object_name.encode('utf-8 ') # 将目标名称转换为UTF-8编码的字节 uart1.write(value_bytes+b'\n') # 通过串口发送目标名称 print(f"通过UART1发送目标名称: {object_name}") #uart1.write(uart_data) #print(f"通过UART1发送目标名称: {packet}") time.sleep(0.5) dis.show(img) 将这段代码串口发送部分改为,如果object_name是dianchi,则发送信号为@1](28字节),如果是zhituan咋发送@0](28字节)
最新发布
07-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值