-
K近邻算法模型搭建不管是K近邻算法还是机器学习算法,我们一般搭建机器学习模型都分为2个步骤。第1步,划分训练集与测试集,第2步完成模型的搭建.下面我们具体实现,代码如下:import cv2 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier as KNN df = pd.read_excel("手写字体识别.xlsx") # 提取特征变量,识别数字时,其特征就是1024个0,1数据,而目标变量就是1024个数字组成对应的结果数字 X = df.drop(columns="对应数字") Y = df['对应数字'] x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=111) knn = KNN(n_neighbors=5) knn.fit(x_train, y_train) answer=knn.predict(img_array) print("图中的数字是:"+str(answer[0])) 这里,我们首先读取手写字体识别的数据集,然后提取特征变量与目标变量。再然后,使用train_test_split函数将获取的数据集分为测试集与训练集,test_size=0.2表示将20%的数据划为测试集,训练集返回x_train,y_train,测试集返回x_test,y_test。接着,使用训练集数据建模fit,这里K近邻算法n_neighbors=5,表示选取5个近邻点来决定数字图片的分类,或者说识别判断。建模完成之后,可以将上面转换图片的一维数组,直接代入到knn.predict函数中,得到预测的结果。我们测试的图片如下:运行之后,得到的结果如下:作者:极客学编程链接:https://juejin.cn/post/6990199241796747278来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
识别数字在OpenCV-Python开发指南的第一篇我们就介绍了二值图像,二值图像可以区分形状已经物体大概的轮廓。如下图所示:这里的图像A就是0和1的矩阵集合,数字1代表有颜色的地方,数字0代表无颜色的地方。这里,我们提供给机器学习的样本数据为1024个元素的一维数组,通过Excel表格提供,而图像是一个矩阵并不是一维数组。所以,在处理原始图像时,我们需要将图片的矩阵数据转换为一维数组,以便于机器学习的匹配预测。调整图像首先,我们需要识别的数字图像可能并不是一个二值图像,甚至可能不是一个灰度图像。所以我们需要将其转换为二值图像。其次,OpenCV转换的二值图像是一个矩阵,而机器学习训练的数据是一个1024长度的一维数组。所以,我们还需要将图像缩小为32*32像素的图像,这样其转换为一维数组才是1024个0,1数据。具体代码如下:import cv2 img = cv2.imread("40.jpg") img = cv2.resize(img, (32, 32)) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) t, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV) img[img == 255] = 1 img_array= img.reshape(1, -1) # 转换为一维数组 这里,我们首先获取图像,然后将图像转换为32*32像素的大小。接着,在转换为灰度图像,并通过二值化处理将图像变更为0和255两个值,最后将255白色的部分替换成1。最后,将其转换为一维数组。作者:极客学编程链接:https://juejin.cn/post/6990199241796747278来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
K近邻算法机器学习算法是从数据中产生模型,也就是进行学习的算法。我们把经验提供给算法,它就能够根据经验数据产生模型。在面对新的情况时,模型就会为我们提供预测的结果。例如,识别数字,文字时,其实识别它们并不需要颜色,使用二值图像就行,而二值图像的数字文字都是0,1组成,机器学习会根据0与1的位置匹配最相近的文字或者数字,从而得出结果。而机器学习中的K近邻算法最适合识别图像中的文字或者数字信息。K近邻算法又称为KNN算法,是非常经典的机器学习算法。其原理非常简单:对于一个新样本,这里可以理解为一个新数字图像或文字图像,K近邻算法会在已有数据中寻找与它最相似的K个数据,或者说离它最近的K个数据,如果这K个数据大多数属于某个类别,则该样本也属于这个类别。作者:极客学编程链接:https://juejin.cn/post/6990199241796747278来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
实战保存摄像头录制的视频通过上面的讲解,我们已经知道了如何保存摄像头的视频。下面,我们来实战保存摄像头录制的视频影像,具体代码如下所示:import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) while (cap.isOpened()): ret, frame = cap.read() if ret: out.write(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break else: break cap.release() out.release() cv2.destroyAllWindows() 运行之后,我们就会捕获摄像头录制的视频,直到你按下ESC键后停止。录制Canny边缘检测视频通过上文,我们知道如果如果后期处理视频,就需要对其每一帧的图像进行处理。现在,我们来实现Canny边缘检测,具体代码如下:import cv2 cap = cv2.VideoCapture(0) fourcc = cv2.VideoWriter.fourcc('m', 'p', '4', 'v') out = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) while (cap.isOpened()): ret, frame = cap.read() if ret: frame=cv2.Canny(frame,100,200) out.write(frame) cv2.imshow('video', frame) c = cv2.waitKey(1) if c == 27: break else: break cap.release() out.release() cv2.destroyAllWindows() 运行之后,我们的视频效果如下:作者:极客学编程链接:https://juejin.cn/post/6989915535341273095来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
VideoWriter在OpenCV中,它给我们提供了cv2.VideoWriter类将图片序列保存为视频。同时,通过该类,我们也可以修改视频的各种属性,完成对视频类型的转换。一般我们使用cv2.VideoWriter类,需要如下3个步骤。构造函数OpenCV为cv2.VideoWriter类提供了构造函数,用它来实现初始化工作。该函数的完整定义如下:cv2.VideoWriter(filename,fourcc,fps,frameSize[,isColor]) filename:需要输出保存的视频文件名。如果文件名存在,覆盖原文件。fourcc:视频的编码类型。在OpenCV中,cv2.VideoWriter_fourcc()函数用来指定视频的编码格式。该函数的参数有4个,这4个字符构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。常用标记如下表:取值含义cv2.VideoWriter_fourcc('I','4','2','0')未压缩的YUV颜色编码格式,色度子采样为4:2:0,该编码格式具有较好的兼容性,但生成的视频文件较大,文件扩展名为.avicv2.VideoWriter_fourcc('P','I','M','I')MPEG-1编码格式,生成的文件扩展名为.avicv2.VideoWriter_fourcc('X','V','I','D')MPEG-4编码格式,如果希望得到的视频大小为平均值,可以选用这个参数组合。文件扩展名为.avicv2.VideoWriter_fourcc('T','H','E','O')Ogg Vorbis编码格式,文件扩展名为.ogvcv2.VideoWriter_fourcc('F','L','V','I')Flash视频格式,文件扩展名为.flvcv2.VideoWriter_fourcc('M','P','4','V')文件扩展名.mp4fps:帧速率,比如录制视频每秒30帧,或者60帧等。frameSize:帧的长宽isColor:是否为彩色图像write函数cv2.VideoWriter类中还提供了cv2.VideoWriter.write()函数用于写入下一帧视频。其完整定义如下:cv2.VideoWriter.write(image) image参数是需要写入的视频帧,也就是前篇博文最后实战项目中的frame。释放同样的,在不需要cv2.VideoWriter类对象时,需要将其释放。释放所使用的函数为cv2.VideoWriter.release()。作者:极客学编程链接:https://juejin.cn/post/6989915535341273095来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。OpenCV可以在Windows,Android,Maemo,FreeBSD,OpenBSD,iOS,Linux 和Mac OS等平台上运行。使用者可以在 SourceForge 获得官方版本,或者从 SVN 获得开发版本。OpenCV也是用CMake。在Windows上编译OpenCV中与摄像输入有关部分时,需要DirectShow SDK中的一些基类。该SDK可以从预先编译的Microsoft Platform SDK(or DirectX SDK 8.0 to 9.0c / DirectX Media SDK prior to 6.0)的子目录Samples\Multimedia\DirectShow\BaseClasses获得。于2010年12月06日,OpenCV 2.2.0 正式版发布
-
OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python、Java and MATLAB/OCTAVE(版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#、Ch、Ruby的支持。所有新的开发和算法都是用C++接口。一个使用CUDA的GPU接口也于2010年9月开始实现。1、人机互动2、物体识别3、图像分割4、人脸识别5、动作识别6、运动跟踪7、机器人8、运动分析9、机器视觉10、结构分析11、汽车安全驾驶ModelArts同样涉及不少应用领域,ModelArts一站式AI开发平台是华为技术有限公司研发的一款技术产品。提供全流程的AI开发服务,海量数据处理、大规模分布式训练、端·边·云模型按需部署,运维管理,帮助用户快速创建和部署模型、管理全周期 AI 工作流,满足不同开发层次的需要,降低AI开发和使用门槛,实现系统的平滑、稳定、可靠运行。获得荣誉该技术产品在2019年5月26日获得2019中国国际大数据产业博览会“领先科技成果奖之黑科技”奖项。
-
OpenCV开源计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:1、研究代码(慢,不稳定,独立并与其他库不兼容)2、耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)3、依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)这是如今的现状,而标准的API将简化计算机视觉程序和解决方案的开发,OpenCV致力于成为这样的标准API。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。图1为OpenCV与当前其他主流视觉函数库的性能比较。
-
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。OpenCV 拥有包括 500 多个C函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也可以使用某些外部库。OpenCV 为Intel® Integrated Performance Primitives(IPP)提供了透明接口。这意味着如果有为特定处理器优化的 IPP 库,OpenCV 将在运行时自动加载这些库。 1999年1月,CVL项目启动。主要目标是人机界面,能被UI调用的实时计算机视觉库,为Intel处理器做了特定优化。2000年6月,第一个开源版本OpenCV alpha 3发布。2000年12月,针对linux平台的OpenCV beta 1发布。2006年,支持Mac OS的OpenCV 1.0发布。2009年9月,OpenCV 1.2(beta2.0)发布。2009年10月1日,Version 2.0发布。2010年12月6日,OpenCV 2.2发布。2011年8月,OpenCV 2.3发布。2012年4月2日,发布OpenCV 2.4。2014年8月21日,发布OpenCv 3.0 alpha。2014年11月11日,发布OpenCV 3.0 beta。2015年6月4日,发布OpenCV 3.0。2016年12月,发布OpenCV 3.2版(合并969个修补程序,关闭478个问题)2017年8月3日,发布OpenCV 3.3版(最重要的更新是把DNN模块从contrib里面提到主仓库)OpenCV 使用类BSDlicense,所以对非商业应用和商业应用都是免费(FREE)的。(细节参考 license)OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV的代码经过适当改写可以正常的运行在DSP系统和ARM嵌入式系统中,这种移植在大学中经常作为相关专业本科生毕业设计或者研究生课题的选题。
-
OpenCV在TEXT扩展模块中支持场景文字识别,最早的场景文字检测是基于级联检测器实现,OpenCV中早期的场景文字检测是基于极值区域文本定位与识别、最新的OpenCV3.4.x之后的版本添加了卷积神经网络实现场景文字检测,后者的准确性与稳定性比前者有了很大的改观,不再是鸡肋算法,是可以应用到实际场景中的。值得一提的是基于CNN实现场景文字检测算法OpenCV中采用了是华中科技大学贡献的模型,模型结构如下:代码演示 基于极值区域文本定位的方法实现场景文字检测演示如下:def cascade_classfier_text_detect(): img = cv.imread("D:/images/cover_01.jpg") vis = img.copy() # Extract channels to be processed individually channels = cv.text.computeNMChannels(img) cn = len(channels)-1 for c in range(0,cn): channels.append((255-channels[c])) # Apply the default cascade classifier to each independent channel (could be done in parallel) print("Extracting Class Specific Extremal Regions from "+str(len(channels))+" channels ...") print(" (...) this may take a while (...)") for channel in channels: erc1 = cv.text.loadClassifierNM1('trained_classifierNM1.xml') er1 = cv.text.createERFilterNM1(erc1,16,0.00015,0.13,0.2,True,0.1) erc2 = cv.text.loadClassifierNM2('trained_classifierNM2.xml') er2 = cv.text.createERFilterNM2(erc2,0.5) regions = cv.text.detectRegions(channel,er1,er2) rects = cv.text.erGrouping(img,channel,[r.tolist() for r in regions]) #Visualization for r in range(0,np.shape(rects)[0]): rect = rects[r] cv.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (255, 0, 0), 2) cv.rectangle(vis, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (0, 0, 255), 1) #Visualization cv.imshow("Text detection result", vis) cv.imwrite("D:/test_detection_demo_02.png", vis) cv.waitKey(0)基于卷积神经网络模型实现场景文字检测演示如下:def cnn_text_detect(): image = cv.imread("D:/images/cover_01.jpg") cv.imshow("input", image) result = image.copy() detector = cv.text.TextDetectorCNN_create("textbox.prototxt", "TextBoxes_icdar13.caffemodel") boxes, scores = detector.detect(image); threshold = 0.5 for r in range(np.shape(boxes)[0]): if scores[r] > threshold: rect = boxes[r] cv.rectangle(result, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (255, 0, 0), 2) cv.imshow("Text detection result", result) cv.waitKey() cv.waitKey(0) cv.destroyAllWindows()运行结果 基于极值区域文本定位
-
OpenCVHalcon开发语言C++、C#(emgu)、Python、Ruby、MATLAB等语言C,C++,C#,Visual basic和Delphi等语言应用场合侧重计算机视觉领域,侧重研究领域侧重机器视觉领域,侧重应用领域费用免费收费开放性及版本更新速度开源(可看底层源码),版本和功能更新慢商业软件(底层代码封装),版本和功能更新快对使用者的门槛偏科研,有难度,有深度,完全从底层开发,对使用者门槛高,开发效率低,开发慢偏工程应用,使用封装好的功能函数,对使用者门槛低,开发效率高,开发快资料及技术支持资料少。遇到问题,难以获得技术支持资料多。遇到问题,可以及时、有效的获得技术支持Halcon 在工业视觉领域属于经常使用的软件,相对于opencv的开源精神Halcon属于商业非开源项目并且收费。Halcon起源于德国在国内的工业视觉领域市场占用率遥遥领先。作者在使用halcon的过程中也感受了其软件的人性化,有独立的调试编程环境。对应主流的语言C#、C++、VB等工业上常用的语言都能提供流程的调用。Halcon提供的每一年都有升级,在升级的过程中算子的速度更快能达到汇编级别的加速度,对比opencv在总体的算子性能领先程序在五到十年。与此同时Opencv在调试的过程中没有Halcon方便,opencv的使用需要用户有比较好的编程基础,并且图像并不是实时能够观察调整。Halcon:底层功能算法多,运算性能快,开发需要一定软件功底和图像处理理论。快速学习的做法:研究实例、做实战项目。halcon不能提供相应的界面编程需求,需要和vs来构造界面,才能构成一套完整软件。 OpenCV Opencv:计算机图像方面的图像库,开源的,可以用于商用,在很多高校和科研机构使用比较多,更多的人选择它,是为了写自己的算法,其调试不像Halcon那样方便,其项目开发周期也比Halcon要长,所以在工业应用上,还不是太多。 但是,如果你是搞算法的,并且项目周期长,公司不愿意购买/使用商业视觉软件的,可以考虑Opencv;如果你的项目周期短,公司可以承受商业软件的成本,选择Halcon会是比较明智的选择。
-
因为业务需求需要在海思平台运行opencv的图像拼接功能,我将opencv和opencv_contrib下载后进行编译出现fatal error: arm-linux-gnueabi/freetype2/freetype/config/ftheader.h: No such file or director 报错,现在找不到原因,在虚拟机上用g++编译又是正常的,希望有大神指导
-
使用opencv报错,尝试安装依赖却报错IniParser: Can't open fileError: There are no enabled repos求方法
-
【功能模块】【操作步骤&问题现象】1、MDS C++环境无法使用opencv库,应该怎么将openCV部署到MDS上【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
【功能模块】python 的openCV功能异常【操作步骤&问题现象】1、正常安装python3.7的openCV后,可以实现图片读取、resize等功能;2、使用VideoCapture拉RTSP流异常,未报错,但是无法获取流的宽高,无法读取图片;3、在X86上运行正常cap = cv2.VideoCapture("rtsp://admin:admin@192.168.2.64:554//Streaming/Channels/1")ret,frame = cap.read()while ret: ret,frame = cap.read() cv2.imwrite(str(i)+".jpg",frame)print("error:",)cap.release()【截图信息】VideoCapture未报错,但是read(),返回false【日志信息】(可选,上传日志内容或者附件)
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签