• [其他] OpenCV的优势
    计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:1、研究代码(慢,不稳定,独立并与其他库不兼容)2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。
  • [其他] 如何使用 OpenCV 开发虚拟键盘(2)
    使用 OpenCV 的虚拟键盘主程序重要的部分来了。 while True: success, img = cap.read() img = detector.findHands(img) lmList, bboxInfo = detector.findPosition(img) img = draw(img, buttonList) # change the draw funtion to transparent_layout for transparent keys if lmList: for button in buttonList: x, y = button.pos w, h = button.size if x < lmList[8][0]<x+w and y < lmList[8][1] < y+h: cv2.rectangle(img, button.pos, (x + w, y + h), (0, 255, 255), cv2.FILLED) cv2.putText(img, button.text, (x + 20, y + 65), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 0), 4) l, _, _ = detector.findDistance(8,12, img, draw=False) print(l) if l < 25: keyboard.press(button.text) cv2.rectangle(img, button.pos, (x + w, y + h), (0, 255, 0), cv2.FILLED) cv2.putText(img, button.text, (x + 20, y + 65), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 0), 4) final_text += button.text sleep(0.20) cv2.rectangle(img, (25,350), (700, 450), (255, 255, 255), cv2.FILLED) cv2.putText(img, final_text, (60, 425), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 0), 4) # cv2.rectangle(img, (100,100), (200,200), # (100, 255, 0), cv2.FILLED) # cv2.putText(img, 'Q', (120,180), cv2.FONT_HERSHEY_PLAIN, 5, # (0, 0, 0), 5) # img = mybutton.draw(img) cv2.imshow("output", img) cv2.waitKey(1)在 while 循环中,首先我们读取实时输入帧并将其存储在一个名为img的变量中。然后我们将该图像传递给*检测器.findHands()*以便在帧中找到手。然后在该图像中,我们需要找到检测到的手的位置和边界框信息。 在这里我们可以找到我们的食指和中指的顶点之间的距离,如果两者之间的距离小于某个阈值,那么我们就可以输入我们所指示的字母。 一旦我们获得了位置,我们就会遍历整个位置列表。从该列表中,我们找到按钮位置和按钮大小,然后根据明确定义的方式将其绘制在框架上。 之后,我们需要找到食指和中指的顶点之间的距离。在上图中,你可以看到我们需要的最高点是点 8 和点 12。因此,我们需要在距离查找函数中传递 8, 12 以获得它们之间的距离。 在上面的代码中,你可以看到 detector.findDistance(),我们通过了 8、12 和图像来查找距离,并将绘制标志设置为 false,这样我们就不需要两点之间的任何线。 如果点之间的距离非常小,我们将使用 press() 函数来按下按键。在上面的代码keyboard.press() 中,我们传递button.text以显示按下的键。最后,我们在键盘布局下方绘制一个小的白色矩形框,以显示按下的键。 一旦你执行了整个代码,它看起来像这样。 将食指和中指靠近特定字母的顶部后,你可以键入该字母 如果你需要更自定义的键盘布局,我们可以使键盘布局透明。我们只需要添加一个透明布局函数并将*draw()函数替换为transparent_layout()*函数即可。 让我们定义transparent_layout()函数。下面是函数的代码,它采用与draw()函数相同的输入。在这里,我们将 numpy 的zero_like()函数分配给 名为imgNew的变量,并对其执行所需的操作,例如获得角矩形、为每个键创建矩形框并将文本放入框内。之后,我们将该图像复制到一个新变量并创建一个imgNew掩码,然后我们使用 OpenCV 的*addWeighted()*函数将掩码放置在实际图像的顶部。因此,这使键盘布局透明。自定义键盘def transparent_layout(img, buttonList): imgNew = np.zeros_like(img, np.uint8) for button in buttonList: x, y = button.pos cvzone.cornerRect(imgNew, (button.pos[0], button.pos[1], button.size[0],button.size[0]), 20 ,rt=0) cv2.rectangle(imgNew, button.pos, (x + button.size[0], y + button.size[1]), (255, 144, 30), cv2.FILLED) cv2.putText(imgNew, button.text, (x + 20, y + 65), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 0), 4) out = img.copy() alpaha = 0.5 mask = imgNew.astype(bool) print(mask.shape) out[mask] = cv2.addWeighted(img, alpaha, imgNew, 1-alpaha, 0)[mask] return out一旦将while 循环中的*draw()函数替换为transparent_layout()*函数,它将如下所示。(下图)
  • [其他] 如何使用 OpenCV 开发虚拟键盘(1)
    介绍OpenCV 是最流行的计算机视觉任务库,它是用于机器学习、图像处理等的跨平台开源库,用于开发实时计算机视觉应用程序。 CVzone 是一个计算机视觉包,它使用 OpenCV 和 Media Pipe 库作为其核心,使我们易于运行,例如手部跟踪、人脸检测、面部标志检测、姿势估计等,以及图像处理和其他计算机视觉相关的应用程序。使用 OpenCV 实现虚拟键盘让我们创建一个虚拟键盘。 首先,让我们安装所需的模块。 pip install numpy pip install opencv-python pip install cvzone pip install pynput使用 OpenCV 为虚拟键盘导入库现在让我们导入所需的模块 import cv2 import cvzone from cvzone.HandTrackingModule import HandDetector from time import sleep import numpy as np from pynput.keyboard import Controller这里我们从 cvzone.HandTrackingModule 导入 HandDetector 模块,然后为了使虚拟键盘工作,我们需要从 pynput.keyboard 导入Controller。 cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) cap.set(3, 1280) cap.set(4, 720)现在让我们从 cv2.Videocapture 获取实时输入 detector = HandDetector(detectionCon=0.8) keyboard_keys = [["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P"], ["A", "S", "D", "F", "G", "H", "J", "K", "L", ";"], ["Z", "X", "C", "V", "B", "N", "M", ",", ".", "/"]] final_text = ""我们以 0.8 的检测置信度初始化 HandDetector 并将其分配给检测器。 然后我们根据键盘的布局创建一个列表数组,并定义一个空字符串来存储键入的键。定义绘制函数keyboard = Controller() def draw(img, buttonList): for button in buttonList: x, y = button.pos w, h = button.size cvzone.cornerRect(img, (button.pos[0], button.pos[1], button.size[0],button.size[0]), 20 ,rt=0) cv2.rectangle(img, button.pos, (int(x + w), int(y + h)), (255, 144, 30), cv2.FILLED) cv2.putText(img, button.text, (x + 20, y + 65), cv2.FONT_HERSHEY_PLAIN, 4, (0, 0, 0), 4) return img初始化键盘控制器,并定义一个名为draw()的函数,它接受两个参数,即图像和按钮列表并返回图像。在draw()函数内部,我们使用 cvzone 的cornerRect函数在每个键的角落绘制矩形边缘。这是为了让我们的键盘布局看起来更好看。就像下面的图片。 你也可以尝试更改不同的颜色。 class Button(): def __init__(self, pos, text, size=[85, 85]): self.pos = pos self.size = size self.text = text然后我们定义一个名为 Button() 的类,并提供位置、文本和大小作为输入,以便我们可以按照明确定义的顺序排列键盘按键。 buttonList = [] # mybutton = Button([100, 100], "Q") for k in range(len(keyboard_keys)): for x, key in enumerate(keyboard_keys[k]): buttonList.append(Button([100 * x + 25, 100 * k + 50], key))上面的循环将遍历键盘按键和 Button 对象,我们在其中给出位置和文本作为输入附加在一个名为 button list 的列表中。稍后我们可以将这个列表传递给 draw 函数以在我们的实时框架之上进行绘制。
  • [其他] opencv-实现手动人脸祛痘
    既然,我们已经了解了手动祛痘的方法函数。下面,我们来实现手动的祛痘效果,具体代码如下所示:global img, point global inpaintMask #手动祛痘 def manual_acne(event, x, y, flags, param): global img, point img2 = img.copy() height, width, n = img.shape inpaintMask = np.zeros((height, width), dtype=np.uint8) if event == cv2.EVENT_LBUTTONDOWN: point = (x, y) cv2.circle(img2, point, 15, (0, 255, 0), -1) cv2.circle(inpaintMask, point, 15, 255, -1) cv2.imshow("image", img2) elif event == cv2.EVENT_LBUTTONUP: cv2.circle(img2, point, 15, (0, 255, 0), -1) cv2.circle(inpaintMask, point, 15, 255, -1) cv2.imshow("inpaintMask", inpaintMask) cv2.imshow("image", img2) cv2.imshow("image0", img) result = cv2.inpaint(img, inpaintMask, 100, cv2.INPAINT_TELEA) cv2.imshow("result", result) if __name__ == "__main__": global img img = cv2.imread("60.jpg") cv2.namedWindow("image") cv2.setMouseCallback("image", manual_acne) cv2.imshow("image", img) cv2.waitKey() cv2.destroyAllWindows() 复制代码运行之后,效果如下:作者:极客学编程链接:https://juejin.cn/post/6993690275180707870来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(55)---实现人脸手动祛痘效果
    人脸祛痘原理其实,在前面的人脸磨皮以及美白的时候,我们就已经完成了人脸的祛痘,只要高度磨皮(双边滤波)就能达到祛痘的效果。但是一般来说,现在的美图App都会给用户提供手动祛痘的功能,毕竟自动美白祛痘的效果再怎么好,都不可能完美的复原所有的人脸,那么额外的针对个人的修复就显得格外重要。其实人脸祛痘说白了,就是图像修复。而OpenCV中提供的修补函数为cv2.inpaint()。这里,我们先来看看改函数的定义:def inpaint(src, inpaintMask, inpaintRadius, flags, dst=None): 复制代码src:输入图像inpaintMask:修复掩膜inpaintRadius:需要修补的每个点的圆形领域为修复算法参考的半径flags:修复方法,两种取值。取值为INPAINT_NS基于Navier-Stokes的方法;INPAINT_TELEA基于Alexandru Telea。dst:返回修复后的图像该方法的原理是利用待修补区域的边缘信息,同时采用一种由粗到精的方法来估计等照度线的方法,并采用传播机制将信息传播到待修补的区域,以便达到较好的修补效果。翻译成人话就是:利用边缘的像素值,修补指定区域的像素。作者:极客学编程链接:https://juejin.cn/post/6993690275180707870来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(54)---实现人脸美白算法
    人脸美白原理人脸美白原理说透了,就是一种图像的颜色空间处理,所以我们需要通过颜色空间进行设计。不过,我们先来参考以下PS对于图像美白的处理步骤:首先,新建一个图层,将这个图层设置为白色接着,将白色图层与原本图像进行alpha通道的颜色混合,这样就可以使图像整体变白。通过PS的操作,我们大致可以知道需要创建一个与原图同等大小维度的图像,然后全部赋值为白色,然后通过图像图像加权和将两个图像叠加即可。不过,这里明显存在很多问题,在PS中,我们虽然创建了全白色的图层,但是我们可以剪裁或者使用画笔工具只让白色叠加倒人物身上。而程序中,我们这么做会导致整个图像偏白,效果非常不理想。那么,我们就需要考虑一个新的思路来实现人脸美白效果。根据论文“A Two-Stage Contrast Enhancement Algorithm for Digital Images”,采用映射表,使原图在色阶上有所增强,并在图像两端亮度相对减弱,中间增强,则会产生不错的美白效果,又能使图像白的更自然。这里,我们提供一个美白映射表Color_list:Color_list = [ 1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 31, 33, 35, 37, 39, 41, 43, 44, 46, 48, 50, 52, 53, 55, 57, 59, 60, 62, 64, 66, 67, 69, 71, 73, 74, 76, 78, 79, 81, 83, 84, 86, 87, 89, 91, 92, 94, 95, 97, 99, 100, 102, 103, 105, 106, 108, 109, 111, 112, 114, 115, 117, 118, 120, 121, 123, 124, 126, 127, 128, 130, 131, 133, 134, 135, 137, 138, 139, 141, 142, 143, 145, 146, 147, 149, 150, 151, 153, 154, 155, 156, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 170, 171, 172, 173, 174, 175, 176, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 205, 206, 207, 208, 209, 210, 211, 211, 212, 213, 214, 215, 215, 216, 217, 218, 219, 219, 220, 221, 222, 222, 223, 224, 224, 225, 226, 226, 227, 228, 228, 229, 230, 230, 231, 232, 232, 233, 233, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 244, 245, 245, 246, 246, 246, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 250, 251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 256]作者:极客学编程链接:https://juejin.cn/post/6993257569489780773来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(53)---实现人脸磨皮算法
    实现人脸磨皮效果既然我们已经完全掌握了人脸磨皮的原理。下面,我们来直接实现人脸的磨皮效果,具体的代码如下所示:# 人脸磨皮 def facial_dermabrasion_effect(fileName): img = cv2.imread(fileName) blur_img = cv2.bilateralFilter(img, 31, 75, 75) #图像融合 result_img = cv2.addWeighted(img, 0.3, blur_img, 0.7, 0) cv2.imwrite("58_1.jpg", result_img) image = Image.open("58_1.jpg") # 锐度调节 enh_img = ImageEnhance.Sharpness(image) image_sharped = enh_img.enhance(1.5) # 对比度调节 con_img = ImageEnhance.Contrast(image_sharped) image_con = con_img.enhance(1.15) image_con.save("58_2.jpg") img1 = cv2.imread("58.jpg") img2 = cv2.imread("58_2.jpg") cv2.imshow("1", img1) cv2.imshow("2", img2) cv2.waitKey() cv2.destroyAllWindows() if __name__ == "__main__": facial_dermabrasion_effect("58.jpg") 复制代码运行之后,效果如下:这段代码的参数都是可以调整的,并不是一层不变的,感兴趣的读者可以自己调节参数试试效果,当然人脸磨皮只是看起来皮肤光滑了。下面结合美白的效果,就可以实现相机的那种美颜。作者:极客学编程链接:https://juejin.cn/post/6992794606408564767来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(58)---实现人脸磨皮算法
    人脸磨皮原理人脸磨皮是最基础的人脸美颜效果。主要分为祛斑,祛痘,淡化黑眼圈等步骤。通过前面的学习相信大家一眼都看得出来我们需要干什么才能识别人脸磨皮效果。因为磨皮之后,脸部的杂质基本上就没有了,也可以说丢失了细节。那么肯定需要用到滤波函数。滤波的过程就是把图像的每一个像素值输入过滤器,得到平滑的图像。而我们常用的滤波有均值滤波,高斯滤波以及双边滤波三种,到底选用那种滤波呢?首先,均值滤波会因为是用周围像素的平均值代替原像素值,肯定会导致图像过于模糊,所以排除掉。其次,高斯滤波与均值滤波原理类似,只是高斯滤波器的模板系数会随着距离模板中心的增大而减小,虽然可以减弱图像的模糊程度,但是图像边缘信息会丢失。那么,只剩一个滤波了,也就是双边滤波器。因为它同时综合了高通滤波器和a-截尾均值过滤器的叠加效果,即可以保证图像不是非常模糊,也可以保留图像边缘信息。而人脸磨皮原理的步骤分为如下3个步骤:图像滤波图像融合图像锐化因为,不管上面3种滤波如何,都会导致一定的模糊(只是相对来说谁更优而已),所以需要对图像进行融合与锐化的操作。这样,可以保留一些图像的细节,以增强图像的真实感。其中,图像融合使用的函数就是cv2.addWeighted()图像加权函数。融合的是原图与双通滤波后的图像。最后,图像锐化使用的PIL库进行操作,使用它的ImageEnhance.Sharpness()函数自动调节图像的锐度与对比度。作者:极客学编程链接:https://juejin.cn/post/6992794606408564767来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(52)-跟踪视频人脸,将人脸用马赛克遮挡
    直接实现图片中的马赛克好像有点简单,我们不妨结合前文的捕捉摄像头的知识以及人脸检测知识,将马赛克用于视频之中。话不多说,我们直接上代码:# 将视频中的人脸替换成马赛克 def mosaic_video_effect(img): height, width, n = img.shape new_img = img.copy() size = 20 faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale(gray, scaleFactor=1.15, minNeighbors=2, minSize=(5, 5)) for (x, y, w, h) in faces: for i in range(x + size, (x + w) - 1 - size, size): for j in range(y + size, (y + h) - 1 - size, size): if i - size > 0 and j + size < width and i + size < height and j - size > 0: i_rand = random.randint(i - size, i) j_rand = random.randint(j - size, j) new_img[i - size:i + size, j - size:j + size] = img[i_rand, j_rand, :] else: new_img[x:x + w, y:y + h] = [255, 255, 255] return new_img if __name__ == "__main__": cap = cv2.VideoCapture(0) while (cap.isOpened()): ret, frame = cap.read() frame = mosaic_video_effect(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break cap.release() cv2.destroyAllWindows() 复制代码这里需要注意的是,因为我们只部分遮挡人脸,所以并不是全屏马赛克,而当人脸移动到摄像头边缘时,这个时候i - size,j-size可能小于0,j + size,i + size可能大于宽度高度,将导致数组越界报错。所以,为了避免人脸在边缘时,越界赋值,我们判断在边缘时直接遮挡白色马赛克即可。作者:极客学编程链接:https://juejin.cn/post/6992442204354527262来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] OpenCV(51)---万恶的马赛克
    马赛克算法原理在平常的生活中,我们会经常看到各种马赛克,比如某些宅男硬盘里的视频马赛克,有些直播犯罪嫌疑人的头像遮罩马赛克等。可以说在生活中,马赛克无处不在。因此,我们在学习OpenCV的同时,也要熟练掌握马赛克的应用。下面,我们来了解马赛克算法的几种实现原理:将需要马赛克的图像部位,全部赋值为该区域左上角的第一个像素值将需要马赛克的图像部位像素随机打乱随机用某一点代替需要马赛克区域内的所有像素值。本篇将详细介绍马赛克的处理操作。实现图片中的马赛克这里,我们使用3实现原理,通过随机用某一点代替需要马赛克区域内的所有像素值。具体代码如下所示:#马赛克操作 def mosaic_effect(img): new_img = img.copy() h, w, n = img.shape size = 10#马赛克大小 for i in range(size, h - 1 - size, size): for j in range(size, w - 1 - size, size): i_rand = random.randint(i - size, i) j_rand = random.randint(j - size, j) new_img[i - size:i + size, j - size:j + size] = img[i_rand, j_rand, :] return new_img if __name__ == "__main__": img = cv2.imread("49.jpg") cv2.imshow("0", img) cv2.imshow("1", mosaic_effect(img)) cv2.waitKey() cv2.destroyAllWindows() 复制代码可以看到,我们代码中设置的马赛克大小为10,在这个区域内,随机取一个像素点,将所有的像素都设置成该随机选取的像素值,这样就达到了马赛克的目的。而且对于原图来说,轮廓看起来还是没有变化的。效果如下:作者:极客学编程链接:https://juejin.cn/post/6992442204354527262来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • [其他] ]结合文字识别结果的鲁棒和精确文本视觉问答
    本文简要介绍来自中国传媒大学和中国科学院信息工程研究所合作的ACM MM 2021的论文“Beyond OCR + VQA: Involving OCR into the Flow for Robust and Accurate TextVQA”。文章提出了一个对文字识别结果鲁棒的文本视觉问答方法BOV:通过将光学字符识别(OCR)融入文本视觉问答(TextVQA)的前向处理流程,即借助来自文字检测和文字识别两个阶段的多模态线索,实现在没有准确识别文字的情况下也能获取对文字的合理的语义表示,并利用TextVQA任务丰富的上下文信息对解码的答案进行自适应修正。 一、研究背景为了解决通用视觉问答(VQA)方法无法处理图像中文字信息的缺陷,文本视觉问答(TextVQA)任务被提出。TextVQA为了回答与图像中文字相关的问题,需要同时考虑视觉场景和文字等多个模态的信息及其关系,具有很大挑战。目前主流的方法通过引入一个外部的光学字符识别(OCR)模块作为前处理,再将其与VQA框架结合预测答案,这会使得TextVQA性能很大程度上受到OCR精度的影响,具体表现为以下两种误差累积传播现象:1)OCR错误使得对文字的直接语义编码错误,导致多模态信息的交互推理过程出现偏差,从而无法定位出准确的答案。2)即使是在推理和定位答案正确的情况下,OCR错误仍然会导致最终从OCR结果中“复制”的答案错误。另外,视觉物体模态与图像文字、问题模态交互时存在语义间隔,使得多模态信息无法有效融合。二、方法简介图 1 模型整体框架图1是BOV模型的整体框架,它基于Transformer网络实现问题、图像文字和视觉物体三种模态信息的交互。区别于之前的方法,BOV在文字模态和物体模态分别设计一个模块来实现视觉到语义的映射,从而获得视觉增强的文字表征和语义导向的物体表征,目的是增强特征表示的鲁棒性,减小OCR错误和物体识别错误对推理的影响。另外在答案预测模块提出一个上下文感知的答案修正模块(CRM)对“复制”的答案词进行校正。 各模块具体细节如下: 1.视觉增强的文字表征图 2 文字相关的视觉语义映射网络(TVS)结构图
  • [开发环境] modelart上opencv解析视频有问题
    【功能模块】【操作步骤&问题现象】写了个小demo测试了下,发现opencv解析视频存在问题,代码以及测试结果如下【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [应用开发] 调用opencv,代码编译时提示找不到库
    交叉编译器版本 MDC300_Ubuntu_Crossbuild_Devkit-1.0.105.2MDS版本 MDC_Development_Studio-Ubuntu18-1.0.105.2opencv为交叉编译器内自带的编译报错截图cmakelist文件target_link_libraries单独链接这两个文件还是提示找不到附件cmakelist文件和函数代码cmakelist文件部分截图代码截图
  • [MindX SDK] 【Atlas500产品】【mxpi_videodecoder功能】用opencv保存mxpi_videodecoder的YUV
    【功能模块】【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【atlas200dk】【预处理功能】如何把dvpp处理替换为opencv处理?
    【功能模块】https://gitee.com/ascend/samples/blob/master/python/contrib/portrait_picture/src/main.pydef pre_process(self, image):        """        image preprocess        """        image_dvpp = image.copy_to_dvpp()        yuv_image = self._dvpp.jpegd(image_dvpp)        resized_image = self._dvpp.resize(yuv_image,                                          self._model_width, self._model_height)        return resized_image【操作步骤&问题现象】1、我希望去掉 dvpp,改为opencv来处理,但遇到execute input错误:[WARNING] Input[0] size: 150528 not equal om size: 75264, may cause inference result error, please check model input2、opencv处理时,输入image已经改为由cv2.imread读取文件的,代码如下:def pre_process(self, image):        """        image preprocess        """        #image = cv.cvtColor(image, cv.COLOR_BGR2RGB)        image = cv.cvtColor(image, cv.COLOR_BGR2YUV)        resized_image = cv.resize(image, (self._model_width, self._model_height)).astype(np.int8)        return resized_image【截图信息】【日志信息】(可选,上传日志内容或者附件)
总条数:305 到第
上滑加载中