微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
模型
从模型上看到,它的输入要求有两个,分别是原图跟它的双立方插值图像,输出的则是超分辨率图像。
模型下载与推理
omz_downloader --name single-image-super-resolution-1032
输出层信息如下:
注意输出层得到的结果是0~1之间的浮点数,必须先乘以255,然后再转换到0~255之间UINT8类型显示。
代码实现与演示
import cv2 as cv
import numpy as np
import openvino as ov
# Load the model on to the device
core = ov.Core()
# Read the model.xml and weights file
model = core.read_model(model="D:/projects/single-image-super-resolution-1032.xml")
compiled_model = core.compile_model(model=model, device_name="CPU")
# Store the input and output nodes
original_image_key, bicubic_image_key = compiled_model.inputs
output_layer = compiled_model.output(0)
bgr = cv.imread("D:/facedb/tiaoma/qr_blur_02.jpg")
origin_bgr = cv.resize(src=bgr, dsize=(480, 270), interpolation=cv.INTER_CUBIC)
bicubic_bgr = cv.resize(src=bgr, dsize=(1920, 1080), interpolation=cv.INTER_CUBIC)
input_image = np.expand_dims(origin_bgr.transpose(2, 0, 1), axis=0)
input_image_bicubic = np.expand_dims(bicubic_bgr.transpose(2, 0, 1), axis=0)
result = compiled_model({original_image_key.any_name: input_image,
bicubic_image_key.any_name: input_image_bicubic})[output_layer]
result = result.squeeze(0).transpose(1, 2, 0)
result *= 255
result[result < 0] = 0
result[result > 255] = 255
result = result.astype(np.uint8)
cv.imshow("super resolution", result)
cv.imwrite("D:/result.jpg", result)
cv.waitKey(0)
cv.destroyAllWindows()
原图
超分辨率图像
六大案例
推荐阅读
OpenCV4.8+YOLOv8对象检测C++推理演示
ZXING+OpenCV打造开源条码检测应用
攻略 | 学习深度学习只需要三个月的好方法
三行代码实现 TensorRT8.6 C++ 深度学习模型部署
实战 | YOLOv8+OpenCV 实现DM码定位检测与解析
对象检测边界框损失 – 从IOU到ProbIOU
初学者必看 | 学习深度学习的五个误区
OpenCV4系统化学习