• [技术干货] python 基于opencv实现高斯平滑
    假设一个列数为W,行数为H的高斯卷计算子gaussKernel,其中W,H均为奇数,描点位置在((H-1)/2 ,(W-1)/2),构建高斯卷积核的步骤如下1.计算高斯矩阵2.计算高斯矩阵的和3.高斯矩阵除以其本身的和,也就是归一化下面利用Python来实现构建高斯卷积算子12345678910def getGaussKernel(sigma, H, W):  r, c = np.mgrid[0:H:1, 0:W:1]  r -= (H - 1) / 2  c -= (W - 1) / 2  gaussMatrix = np.exp(-0.5 * (np.power(r) + np.power(c)) / math.pow(sigma, 2))  # 计算高斯矩阵的和  sunGM = np.sum(gaussMatrix)  # 归一化  gaussKernel = gaussMatrix / sunGM  return gaussKernel高斯卷积核可以分离成一维水平方向上的高斯核和一维垂直方向上的高斯核,在OpenCV中给出了构建一维垂直方向上的高斯卷积核的函数:Mat getGaussianKernel(int ksize, double sigma, in ktype = CV/_64F)参数释意ksize一维垂直方向上的高斯核行数,正奇数sigma标准差ktype返回值的数据类型为CV_32F或CV_64F,默认是CV_64F下面通过Python代码来具体的实现图像的高斯平滑,我们首先会对图像水平方向进行卷积,然后再对垂直方向进行卷积,其中sigma代表高斯卷积核的标准差1234567891011121314151617181920212223def gaussBlur(image,sigma,H,W,_boundary = 'fill', _fillvalue = 0):  #水平方向上的高斯卷积核  gaussKenrnel_x = cv2.getGaussianKernel(sigma,W,cv2.CV_64F)  #进行转置  gaussKenrnel_x = np.transpose(gaussKenrnel_x)  #图像矩阵与水平高斯核卷积  gaussBlur_x = signal.convolve2d(image,gaussKenrnel_x,mode='same',boundary=_boundary,fillvalue=_fillvalue)  #构建垂直方向上的卷积核  gaussKenrnel_y = cv2.getGaussianKernel(sigma,H,cv2.CV_64F)  #图像与垂直方向上的高斯核卷积核  gaussBlur_xy = signal.convolve2d(gaussBlur_x,gaussKenrnel_y,mode='same',boundary= _boundary,fillvalue=_fillvalue)  return gaussBlur_xyif __name__ == "__main__":  image = cv2.imread("../images/timg.jpg", cv2.IMREAD_GRAYSCALE)  cv2.imshow("image",image)  #高斯平滑  blurImage = gaussBlur(image, 5, 400, 400, 'symm')  #对bIurImage进行灰度级显示  blurImage = np.round(blurImage)  blurImage = blurImage.astype(np.uint8)  cv2.imshow("GaussBlur", blurImage)  cv2.waitKey(0)  cv2.destroyAllWindows()运行截图:
  • [技术干货] python 利用opencv实现图像网络传输
    本代码主要实现的是利用网络传输图片,用在我的树莓派项目之上。该项目在PC上运行服务端,树莓派上运行客户端,两者连接到同一局域网中,修改代码中的IP地址,就可以实现将树莓派采集到的图像数据实时传输到PC端。先运行服务端代码,然后运行客户端代码即可。树莓派摄像头使用的是普通的USB摄像头,并且在树莓派上安装了opencv,在树莓派上安装opencv的过程可以参考https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/。最后,该代码稍加修改就可以传输其他的信息,当然服务端,客户端也可以同时在PC上运行,以验证结果。所以本质还是希望读者借此代码可以了解python的socket编程。代码意义已在注释中详细说明,仅供参考。使用时请注意修改IP地址和端口号。服务端代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import socketimport timeimport cv2import numpy  def ReceiveVideo():    #IP地址'0.0.0.0'为等待客户端连接    address = ('0.0.0.0', 8002)    #建立socket对象,参数意义见https://blog.csdn.net/rebelqsp/article/details/22109925    #socket.AF_INET:服务器之间网络通信     #socket.SOCK_STREAM:流式socket , for TCP    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)    #将套接字绑定到地址, 在AF_INET下,以元组(host,port)的形式表示地址.    s.bind(address)    #开始监听TCP传入连接。参数指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值至少为1,大部分应用程序设为5就可以了。    s.listen(1)      def recvall(sock, count):        buf = b''#buf是一个byte类型        while count:            #接受TCP套接字的数据。数据以字符串形式返回,count指定要接收的最大数据量.            newbuf = sock.recv(count)            if not newbuf: return None            buf += newbuf            count -= len(newbuf)        return buf             #接受TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。addr是连接客户端的地址。    #没有连接则等待有连接    conn, addr = s.accept()    print('connect from:'+str(addr))    while 1:        start = time.time()#用于计算帧率信息        length = recvall(conn,16)#获得图片文件的长度,16代表获取长度        stringData = recvall(conn, int(length))#根据获得的文件长度,获取图片文件        data = numpy.frombuffer(stringData, numpy.uint8)#将获取到的字符流数据转换成1维数组        decimg=cv2.imdecode(data,cv2.IMREAD_COLOR)#将数组解码成图像        cv2.imshow('SERVER',decimg)#显示图像                 #进行下一步处理        #。        #。        #。      #将帧率信息回传,主要目的是测试可以双向通信        end = time.time()        seconds = end - start        fps = 1/seconds;        conn.send(bytes(str(int(fps)),encoding='utf-8'))        k = cv2.waitKey(10)&0xff        if k == 27:            break    s.close()    cv2.destroyAllWindows()  if __name__ == '__main__':    ReceiveVideo()客户端代码:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354import socketimport cv2import numpyimport time  def SendVideo():    #建立sock连接    #address要连接的服务器IP地址和端口号    address = ('127.0.0.1', 8002)    try:        #建立socket对象,参数意义见https://blog.csdn.net/rebelqsp/article/details/22109925        #socket.AF_INET:服务器之间网络通信         #socket.SOCK_STREAM:流式socket , for TCP        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)        #开启连接        sock.connect(address)    except socket.error as msg:        print(msg)        sys.exit(1)      #建立图像读取对象    capture = cv2.VideoCapture(0)    #读取一帧图像,读取成功:ret=1 frame=读取到的一帧图像;读取失败:ret=0    ret, frame = capture.read()    #压缩参数,后面cv2.imencode将会用到,对于jpeg来说,15代表图像质量,越高代表图像质量越好为 0-100,默认95    encode_param=[int(cv2.IMWRITE_JPEG_QUALITY),15]      while ret:        #停止0.1S 防止发送过快服务的处理不过来,如果服务端的处理很多,那么应该加大这个值        time.sleep(0.01)        #cv2.imencode将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输        #'.jpg'表示将图片按照jpg格式编码。        result, imgencode = cv2.imencode('.jpg', frame, encode_param)        #建立矩阵        data = numpy.array(imgencode)        #将numpy矩阵转换成字符形式,以便在网络中传输        stringData = data.tostring()                 #先发送要发送的数据的长度        #ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串        sock.send(str.encode(str(len(stringData)).ljust(16)));        #发送数据        sock.send(stringData);        #读取服务器返回值        receive = sock.recv(1024)        if len(receive):print(str(receive,encoding='utf-8'))        #读取下一帧图片        ret, frame = capture.read()        if cv2.waitKey(10) == 27:            break    sock.close()     if __name__ == '__main__':    SendVideo()
  • [应用开发] 第三方库的问题:关于点云PCL、OpenCV库的支持
    您好。我想咨询一下应用软件移植时,第三方库的问题:如点云PCL、OpenCV库的支持;1、请问贵公司是否在开发环境编译过?如何在MDC工具链上进行编译; 有没有相关示例;2、比如我需要将激光点云进行分割算法的应用部署到MDC的host上,使用了PCL库;有没有相关的示例可以参考;
  • 鲲鹏arm 安装 numpy opencv opencv_contrib
    1,前置条件yum install numpy opencv* python-devel gstreamer-plugins-base-devel libv4l-devel libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel python-sphinx texlive python3-devel python3.aarch64 -y python3 -m pip install cython yum install blas-devel lapack-devel python3-devel pip3 install scipy     //会自动安装依赖numpy,本次采用官方源,未使用镜像源加速,安装过程很漫长,因为会自动编译安装  2,安装cmake,参考下边链接http://ic-openlabs.huawei.com/openlab/#/knowledgebasequery?task_id=R1S1584D002187178201911251854493362566973,下载opencv和opencv_contrib,两者版本必须一致,3.2.0测试编译成功,高版本可能失败wget    https://github.com/opencv/opencv/archive/3.2.0.zip wget  https://github.com/opencv/opencv_contrib/archive/3.2.0.zip4,解压,编译unzip 3.2.0.zip unzip 3.2.0.zip.1 cd opencv mkdir -p build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_python3=YES -D BUILD_opencv_python2=NO -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib64/python3.6/site-packages/numpy/core/include/ -D OPENCV_EXTRA_MODULES=../../opencv_contrib-3.2.0/modules/ -D  PYTHON3_LIBRARIES=/lib64/libpython3.so -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D __INSTALL_PATH_PYTHON3=/usr/local/lib/python3.6/site-packages/ ..5,安装make -j$(nproc) make install6,验证
  • [技术干货] 【转载】【2020华为云AI实战营】MTCNN、dlib、OpenCv(haar+adaboost级联分类器)三种人脸检测工具比
    【转载华为云社区】一、绪言:    人脸检测技术在我们生活中经常被用到,人脸面部识别、年龄以及表情的识别都是以人脸为基础。目前常用的人脸检测工具有:MTCNN方式、dlib、OpenCV Haar级联分类器等方式。    人脸检测工具使用常见问题如下:    安装时间长    检测时间长    图片中的较小人脸检测效果差    图片中的侧面人脸检测效果差    对图片中多张人脸无法全部检测出来等等问题,这些问题也同样是人脸检测算法面临的挑战。    本文将对MTCNN、dlib、OpenCV三种工具进行测试对比。二、工具简介:MTCNN:        官网:https://kpzhang93.github.io/MTCNN_face_detection_alignment/        MTCNN的安装和使用都十分简单,完成人脸区域检测人脸对齐及5个人脸关键点(双眼,鼻子,嘴角)检测但对于人脸识别,年龄表情等任务已经足够,所以使用十分普遍。    2.dlib:         官网: http://dlib.net/.         dlib是一个机器学习工具库,类似OpenCV,里面预置了一些开发好的传统机器学习算法和深度学习算法。        本案例使用dlib工具库进行人脸区域检测和68个人脸关键点检测。    3.OpenCV(Haar+Adaboost,后文以OpenCV代替):       官网: https://opencv.org/        OpenCV是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。        OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。三、实验对比比较:        实验环境: ModelArts  nootbook开发环境 - v100 GPU- TensorFlow 1.13    耗时计算仅包含测试图片读取及代码库加载时间,不包含测试结果显示耗时    1.正面单脸图片 实验    1.1.MTCNN(单脸正面):          上图是单脸图片的人脸检测,MTCNN耗时大概3s多(含模型加载等,与图片大小等亦有关,下同),含5个关键点,检测结果可见比较准确,但仍有少部分轮廓未能完全检测。        1.2.dlib(单脸正面):相对MTCNN来说,dlib单脸检测速度更快一些,但未能完全检测出全部脸轮廓,含68个关键点信息,但此处不显示。    1.3.OpenCV(单脸正面):        相对MTCNN和dlib而言,OpenCV检测速度更快,定性来看,检测结果几乎能全部包含脸部轮廓,但有非脸部部分会被误认为是脸部。无关键点信息。    2.正面多脸含小脸图片 实验    2.1 MTCNN(多脸 正面 小脸): 仅有小脸的boundding box检测出。可能是程序参数设置导致的,比如OpenCV工具默认有3个矩形框同时存在才认为匹配成功,下同。    速度较慢,单看小脸检测出的结果,准确度较高。    2.2 dlib(多脸 正面 小脸):仅有大脸的boundding box检测出。    速度相对于MTCNN有所提升,单看大脸检测出的结果,准确度不如MTCNN。含68个关键点信息,但此处不显示。    2.3 OpenCV(多脸 正面 小脸): 结果可见最小脸并没有检测出。    速度仍是三者中最快的,准确度一般,和单脸正面图片检测类似,仍然会有非脸部分被误认为是脸部。四、结果分析:    综合定性比较来看:    在检测准确度(检测框与真实脸部对比,非整体检测结果准确度)方面 MTCNN要好于dlib和OpenCV    在检测速度方面,OpenCV(Haar+Adaboost)明显优于MTCNN和dlib    以上仅为个人定性分析结果。如果需要定量分析,可考虑计算预测bounding box与ground truth bounding box的IoU等定量方式加以比较。五、程序:    1.MTCNN 2.dlib3.OpenCV六、参考链接:    MTCNN:      https://kpzhang93.github.io/MTCNN_face_detection_alignment/    https://nbviewer.jupyter.org/github/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_face_age_prediction/face_age_prediction.ipynb    dlib:     https://nbviewer.jupyter.org/github/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_face_detector/face_detection.ipynb    OpenCV:    https://bbs.huaweicloud.com/blogs/179012
  • [技术干货] 【转载】人脸检测工具专栏——OpenCV
    【转载华为云社区】人脸检测技术在我们生活中经常被用到,人脸面部识别、年龄以及表情的识别都是以人脸为基础。接下来我分享一下最近整理的开源人脸检测工具,由于篇幅较长,所以打算将此作为一个专栏,希望能给AI实战营的小伙伴们提供帮助!目前常用的人脸检测工具有:OpenCV Haar级联分类器、MTCNN方式、dlib方式...(后续会继续补充),首先介绍一下OpenCV.....什么是OpenCV?OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。OpenCV 使用 C/C++ 开发,同时也提供了 Python、Java、MATLAB 等其他语言的接口。OpenCV 是跨平台的,可以在  Windows、Linux、Mac OS、Android、iOS 等操作系统上运行。OpenCV 的应用领域非常广泛,包括图像拼接、图像降噪、产品质检、人机交互、人脸识别、动作识别、动作跟踪、无人驾驶等。(以上源于百度搜索)什么是级联分类器?大致知道OpenCV的作用后,来看下Haar特征+Adaboost级联分类器,Haar特征算子就是下图的所有黑色矩阵的像素值减去所有白色矩阵像素值的和。Haar特征可以在检测窗口中由放大+平移产生一系列子特征。可以简单理解为算子在图片上横扫过去生成多个框检索是否有人脸的存在准备工作打开ModelArts控制台选择notebook:点击new,选择Tensorflow1.13.1框架。如图:注:Modelarts中安装好了OpenCV供我们使用,无需再次安装。将测试图片先上传到notebook中,如图,点击Upload上传自己的本地图片:代码实战将haarcascade_frontalface_alt.xml用path变量存储起来。接下来配置分类器,读取图片后进行灰度化处理,处理完将图片传入检测器中检测。haarcascade_frontalface_alt.xml文件可以理解为模型,存储了6061个特征,38个阶段,算子的位置大小形状,直接使用即可。下图给出detectMultiScale检测函数中的参数介绍:第六行代码中detectMultiScale方法中和第一种方法中介绍的一样,gray就是image,1.3代表scaleFactor,5是minNeighbors。最后输出图片结果:解释下最后一句from PIL import Image,PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库。由于我们对图片进行灰度处理,需要从numpy数组格式转换回image格式,故使用Image.fromarray(img)。文中所述的完整代码如下,欢迎大家参考学习!path="/home/ma-user/anaconda3/envs/TensorFlow-1.13.1/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_alt.xml" import cv2 face_cascade = cv.CascadeClassifier(path) #修改为自己的图片文件名 image_path = "./img_nini.jpeg" img = cv.imread(image_path) gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray,1.3,5) for(x,y,w,h) in faces:     cv.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) img = cv.cvtColor(img,cv.COLOR_BGR2RGB) from PIL import Image Image.fromarray(img)
  • [应用开发] 找不到opencv
    请问各位,我在camera_ap_to_ros中添加了一部分图像处理代码后,编译时报错如下,找不到opencv2。/home/yue/eclipse-workspace/cameraros1910/src/camera_to_ros.h:18:30: fatal error: opencv2/opencv.hpp: No such file or directory如图includes里添加了路径后依然找不到请问是为什么呢?谢谢
  • 基于Centos7.6的python3-opencv编译安装方法
    1.      配置yum源cd /etc/yum.repos.d/保留CentOS-Base.repo,同时vim cdrom.repo添加以下信息    [cdrom]    name=cdrom    baseurl=file:///mnt    enabled=1    gpgcheck=02.      挂载镜像mout -o loop Centos******.iso /mnt3.      安装相关依赖yum install numpy opencv* python-devel gstreamer-plugins-base-devel libv4l-devel libpng-devel libjpeg-turbo-devel jasper-devel openexr-devel libtiff-devel libwebp-devel python-sphinx texlive python3-devel python3.aarch64 -y #这部分依赖可以根据需要进行安装,参考链接:https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_setup/py_setup_in_fedora/py_setup_in_fedora.html安装numpy    export CFLAGS="-O0"      #-O1 -O2 -O3会报错,需指定为-O0    pip3 install numpy==1.17.0 4.      下载opencv和opencv-contrib包https://github.com/opencv/opencv_contrib/releases/tag/4.3.0https://github.com/opencv/opencv/releases/tag/4.3.0说明:opencv和opencv_contrib的版本必须对应,否则可能造成编译失败分别上传到系统相目录下,然后解压5.      编译cd opencv-4.3.0/mkdir buildcd buildcmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_opencv_python3=YES -D BUILD_opencv_python2=NO -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib64/python3.6/site-packages/numpy/core/include/ -D OPENCV_EXTRA_MODULES=../../opencv_contrib-4.3.0/modules/ -D  PYTHON3_LIBRARIES=/lib64/libpython3.so -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D __INSTALL_PATH_PYTHON3=/usr/local/lib/python3.6/site-packages/ .. 上面的命令根据实际情况进行修改或增加参数;cmake完成后需确认python3相应的四个参数均有值,如下图所示:6.      make -j64 && make install     7.      验证        
  • [中间件] 【华为云鲲鹏云服务最佳实践】【工具篇】第107期openCV-4.1.0安装配置指南
    1、简介OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。类别:接口工具2、基础环境类别子项版本获取地址(方法)华为云虚拟机KC1(920)--OSCentOS7.5Kernel4.14软件opencv4.1.0https://github.com/opencv/opencv/archive/4.1.0.tar.gz3、依赖安装yum install   wget  make  git cmake3 -y安装gcc-9.2.0参照文档《华为云鲲鹏云服务最佳实践-GCC-9.2 安装配置指南》4、组件编译安装   获取软件包cd /optwget https://github.com/opencv/opencv/archive/4.1.0.tar.gz   解压软件包tar -zxvf 4.1.0.tar.gz 编译和安装cd opencv-4.1.0/mkdir buildcd buildcmake3 ../ 回显如下 make回显如下   make install         回显如下          5、系统配置无6、测试  查看安装OpenCV所生成的库文件和头文件ll /usr/local/lib64/   回显如下           7、参考信息无8、FAQ无
总条数:344 到第
上滑加载中