K.io.load_image读入数据转化到opencv中的数据

由于kornia读入的数据为3*W*H,而opencv中读入的数据为W*H*3

在二者中转化的可以做如下代码操作

import io

import kornia as K
import kornia.feature as KF
import matplotlib.pyplot as plt
import numpy as np
import torch
import cv2

src_1 = K.io.load_image("/root/code_2/APAP-Image-Stitching/images/demo1/bridge01.jpg", K.io.ImageLoadType.RGB32)

src_2 = src_1.permute(1,2,0).numpy()*256
src_2 = src_2[:, :, ::-1]
cv2.imwrite("test.jpg",src_2)

需要注意的是

kornia读取数据是0-1的颜色存储,并且为RGB,而opencv中的存储为,0-255,颜色通道为BGR。所以需要倒置。

### 如何使用 TensorFlow 和 OpenCV 实现目标检测 #### 准备工作 为了能够顺利运行目标检测程序,需要安装必要的软件包。这通常包括 Python 版本的 TensorFlow 库和 OpenCV-Python 绑定。 对于 TensorFlow 的环境搭建可以参考官方文档[^1];而对于 OpenCV,在大多数情况下可以通过 pip 安装 `opencv-python` 来获得所需的功能支持。 #### 加载预训练模型 TensorFlow 提供了一个称为 Object Detection API 的工具集,其中包含了多种预先训练好的模型可供选择。可以从 TensorFlow Model Zoo 下载适合自己的模型文件(.pb),并准备好对应的标签映射文件(labelmap.pbtxt)[^1]。 ```python import tensorflow as tf from object_detection.utils import label_map_util # 路径到 .pb 文件 PATH_TO_FROZEN_GRAPH = 'path/to/frozen_inference_graph.pb' detection_graph = tf.Graph() with detection_graph.as_default(): od_graph_def = tf.compat.v1.GraphDef() with tf.io.gfile.GFile(PATH_TO_FROZEN_GRAPH, 'rb') as fid: serialized_graph = fid.read() od_graph_def.ParseFromString(serialized_graph) tf.import_graph_def(od_graph_def, name='') category_index = label_map_util.create_category_index_from_labelmap('path/to/mscoco_label_map.pbtxt', use_display_name=True) ``` #### 图像输入与输出处理 当有了上述准备之后就可以开始编写代码来读入图片数据,并调用 TensorFlow 进行推理预测。这里会涉及到一些基本操作比如调整大小、换颜色空间等,这些都是由 OpenCV 处理完成的[^4]。 ```python import numpy as np import cv2 def load_image_into_numpy_array(image): (im_width, im_height) = image.size return np.array(image.getdata()).reshape( (im_height, im_width, 3)).astype(np.uint8) cap = cv2.VideoCapture(0) # 打开摄像头获取视频流 while True: ret, frame = cap.read() if not ret: break image_np = load_image_into_numpy_array(frame) # 推理过程... # 显示结果帧 cv2.imshow('Object Detection', output_frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` #### 结合 TensorFlow 进行推理 在得到图像数组后,下一步就是把它们送入之前加载好的 TensorFlow 模型中去执行前向传播运算,从而得出物体的位置信息和其他属性。这部分逻辑应该放在上面提到的那个 while 循环体内。 ```python with detection_graph.as_default(): with tf.Session(graph=detection_graph) as sess: ops = tf.get_default_graph().get_operations() all_tensor_names = {output.name for op in ops for output in op.values()} tensor_dict = {} for key in [ 'num_detections', 'detection_boxes', 'detection_scores', 'detection_classes']: tensor_name = key + ':0' if tensor_name in all_tensor_names: tensor_dict[key] = \ detection_graph.get_tensor_by_name(tensor_name) input_tensor = detection_graph.get_tensor_by_name('image_tensor:0') # 将图像成批量形式 [None,height,width,channels] image_np_expanded = np.expand_dims(image_np, axis=0) output_dict = sess.run(tensor_dict, feed_dict={input_tensor: image_np_expanded}) # 对输出字典中的数值做适当变换以便后续可视化 num_detections = int(output_dict['num_detections'][0]) boxes = output_dict['detection_boxes'][0][:num_detections] scores = output_dict['detection_scores'][0][:num_detections] classes = output_dict['detection_classes'][0][:num_detections].astype(np.int32) # ...继续绘制边界框等内容... ``` 以上即为一个完整的流程概述,展示了怎样借助 TensorFlow 和 OpenCV 构建起一套简易的目标检测系统。当然实际应用当中还需要考虑更多细节问题,例如性能优化、多线程并发处理等等[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值