精华内容
下载资源
问答
  • 1、计算机视觉领域方向 2、计算机操作底层技术 安装OpenCV的的两种方法 T1、使用whl文件法 T2、直接命令法 T3、Anaconda 环境下安装 OpenCV常见函数、方法 0、基本库函数 1、图像基本运算 2、Image.open ...

    Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略

     

    目录

    关于OpenCV简介

    OpenCV应用领域

    1、计算机视觉领域方向

    2、计算机操作底层技术

    安装OpenCV的的两种方法

    T1、使用whl文件法

    T2、直接命令法  

    T3、Anaconda 环境下安装

    OpenCV常见函数、方法

    0、基本库函数

    1、图像基本运算

    2、Image.open 和cv2.imread 的区别及其转换


     

    相关文章
    Py之cv2:cv2库(OpenCV)的简介、安装、使用方法(常见函数、方法等)最强详细攻略
    CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础(傅里叶变换-频域-时域/各种滤波器-线性-非线性-均值-中值-高斯-双边)
    CV:计算机视觉图像的基础知识—以python的cv2库来了解计算机视觉图像基础(边缘检测算子+平滑+轮廓标注+形态学+金字塔+傅里叶变换)—代码实现
    CV:计算机视觉技术之图像基础知识(一)—以python的cv2库来了解计算机视觉图像基础—代码实现(图像显示+加文本+变换+通道)—图像基础各种操作(函数及案例)
    CV:计算机视觉技术之图像基础知识(二)—以python的skimage和numpy库来了解计算机视觉图像基础(图像存储原理-模糊核-锐化核-边缘检测核,进阶卷积神经网络(CNN)的必备基础)
    CV:利用python的cv2库实现图像数据增强—随机裁剪、随机旋转、随机hsv变换、随机gamma变换代码实现

     

     

    关于OpenCV简介

           OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。 

           在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库,采用C/C++语言编写,可以运行在Linux/Windows/Mac等操作系统上,能够快速的实现一些图像处理和识别的任务。此外,OpenCV还提供了Java、python、cuda等的使用接口、机器学习的基础算法调用,从而使得图像处理和图像分析变得更加易于上手,让开发人员更多的精力花在算法的设计上。

     

    OpenCV应用领域

    1、计算机视觉领域方向

    • 1、人机互动
    • 2、物体识别
    • 3、图像分割
    • 4、人脸识别
    • 5、动作识别
    • 6、运动跟踪
    • 7、机器人
    • 8、运动分析
    • 9、机器视觉
    • 10、结构分析
    • 11、汽车安全驾驶

    2、计算机操作底层技术

    1. 图像数据的操作: 分配、释放、复制、设置和转换。 图像是视频的输入输出I/O ,文件与摄像头的输入、图像和视频文件输出)。
    2.  矩阵和向量的操作以及线性代数的算法程序:矩阵积、解方程、特征值以及奇异值等。
    3. 各种动态数据结构:列表、队列、集合、树、图等。 
    4. 基本的数字图像处理:滤波、边缘检测、角点检测、采样与差值、色彩转换、形态操作、直方图、图像金字塔等。 
    5. 结构分析:连接部件、轮廓处理、距离变换、各自距计算、模板匹配、Hough变换、多边形逼近、直线拟合、椭圆拟合、Delaunay 三角划分等。 
    6. 摄像头定标:发现与跟踪定标模式、定标、基本矩阵估计、齐次矩阵估计、立体对应。
    7. 运动分析:光流、运动分割、跟踪。 
    8. 目标识别:特征法、隐马尔可夫模型:HMM。
    9. 基本的GUI:图像与视频显示、键盘和鼠标事件处理、滚动条。 
    10. 图像标注:线、二次曲线、多边形、画文字。

     

    安装OpenCV的的两种方法

    1、几点注意事项:

    • 安装的时候是 opencv_python,但在导入的时候采用 import cv2。
    • 因为OpenCV依赖一些库,可以在本博客中查找一些依赖库的安装方法,例如安装Numpy方法等,本博客应有尽有!

    T1、使用whl文件法

    先去官网https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv,下载相应Python版本的OpenCV的whl文件,如本人下载的opencv_python‑3.4.1‑cp36‑cp36m‑win_amd64.whl,然后在whl文件所在目录下,命令 进行安装即可

    pip install opencv_python‑3.4.1‑cp36‑cp36m‑win_amd64.whl

    T2、直接命令法  

    pip install opencv-python  

     

    最后,检测安装情况

    哈哈,大功告成!

     

    T3、Anaconda 环境下安装

    pip install opencv-python      //Anaconda 环境下安装,先打开Anaconda Prompt,再输入本命令进行安装!

     

    20191128更新记录

     

     

     

    OpenCV常见函数、方法

    Welcome to OpenCV-Python Tutorials’s documentation!
    CV:计算机视觉图像的基础知识—以python的cv2库来了解计算机视觉图像基础

     

    0、基本库函数

    cv2.imread(filepath,flags)     #读入一张图像

    • filepath:要读入图片的完整路径
    • flags:读入图片的标志 
      • cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道
      • cv2.IMREAD_GRAYSCALE:读入灰度图片
      • cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道

    cv2.imshow(wname,img)     #显示图像

    • 第一个参数是显示图像的窗口的名字
    • 第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小
    cv2.imshow('image',img)
    cv2.waitKey(0)   #等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。
    #若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。
    cv2.destroyAllWindow()     #销毁所有窗口
    cv2.destroyWindow(wname)   #销毁指定窗口

    cv2.imwrite(file,img,num)    #保存一张图像

    • 第一个参数是要保存的文件名
    • 第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95。
    • 第三个参数表示的是压缩级别。默认为3.

    img.copy()    #图像复制

     

    cv2.cvtColor()      #图像颜色空间转换

    • img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)   #灰度化:彩色图像转为灰度图像
    • img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)   #彩色化:灰度图像转为彩色图像
    • # cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS

    cv2.resize(image, image2,dsize)     #图像缩放:(输入原始图像,输出新图像,图像的大小)
    cv2.flip(img,flipcode)                       #图像翻转,flipcode控制翻转效果。

    • flipcode = 0:沿x轴翻转;flipcode > 0:沿y轴翻转;flipcode < 0:x,y轴同时翻转

    cv2.warpAffine(img, M, (400, 600))       #图像仿射变换 :平移;裁剪、剪切、旋转、仿射变换
    M、M_crop、M_shear、M_rotate

    cv2.putText(img,'text',(50,150)   #图像添加文字:(照片,添加的文字,左上角坐标,字体,字体大小,颜色,字体粗细)

    cv2.putText(image, caption, (b[0], b[1] - 10), cv2.FONT_HERSHEY_PLAIN, 1, (255, 0, 0), 1)
    cv2.putText(I,'there 0 error(s):',(50,150),cv2.FONT_HERSHEY_COMPLEX,6,(0,0,255),25)

    cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)    #画出矩行:img原图、(x,y)是矩阵的左上点坐标、(x+w,y+h)是矩阵的右下点坐标、(0,255,0)是画线对应的rgb颜色、2是所画的线的宽度。

     

    cv2.boundingRect(img)          #返回图像的四值属性:img是一个二值图,即是它的参数; 返回四个值,分别是x,y,w,h; x,y是矩阵左上点的坐标,w,h是矩阵的宽和高。

     

    1、图像基本运算

         图像的基本运算有很多种,比如两幅图像可以相加、相减、相乘、相除、位运算、平方根、对数、绝对值等;图像也可以放大、缩小、旋转,还可以截取其中的一部分作为ROI(感兴趣区域)进行操作,各个颜色通道还可以分别提取及对各个颜色通道进行各种运算操作。
    bitwise_and、bitwise_or、bitwise_xor、bitwise_not四个按位操作函数,是将基础数学运算应用于图像像素的处理中。

    bitwise_and、bitwise_or、bitwise_xor、bitwise_not这四个按位操作函数。
    void bitwise_and(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 & src2
    void bitwise_or(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 | src2
    void bitwise_xor(InputArray src1, InputArray src2,OutputArray dst, InputArray mask=noArray());//dst = src1 ^ src2
    void bitwise_not(InputArray src, OutputArray dst,InputArray mask=noArray());//dst = ~src
    
    • bitwise_and():是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0
    • bitwise_or():是对二进制数据进行“或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作,1|1=1,1|0=0,0|1=0,0|0=0
    • bitwise_xor():是对二进制数据进行“异或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“异或”操作,1^1=0,1^0=1,0^1=1,0^0=0
    • bitwise_not():是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作,~1=0,~0=1

    2、Image.open 和cv2.imread 的区别及其转换

    Image.open 打开来的图像格式,cv2.imread  读出来是像素格式。

    # 1、PIL.Image转换成OpenCV格式:
    import cv2
    from PIL import Image
    import numpy
     
    path = 'F:/File_Python/Resources/face_images/LZT01.jpg'
    img = Image.open(path).convert("RGB")#.convert("RGB")可不要,默认打开就是RGB
    img.show()
    #转opencv
    #img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
    img = cv2.cvtColor(np.array(img),cv2.COLOR_RGB2BGR)
    cv2.imshow("OpenCV",img)
    cv2.waitKey()
     
    # 2、OpenCV转换成PIL.Image格式
    import cv2
    from PIL import Image
    import numpy
     
    img = cv2.imread('F:/File_Python/Resources/face_images/LZT01.jpg') # opencv打开的是BRG
    cv2.imshow("OpenCV",img)
    image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
    image.show()
    cv2.waitKey()


     
     

     

     

     

    相关应用:CV:利用python的cv2库实现图像数据增强—随机裁剪、随机旋转、随机hsv变换、随机gamma变换代码实现

     

     

     

    参考文章
    OpenCV之bitwise_and、bitwise_not等图像基本运算及掩膜
    模块cv2的用法
     

    展开全文
  • python 安装CV2

    万次阅读 多人点赞 2018-10-28 21:25:30
    大多数的情况下,是可以的安装成功CV2,可是有时,这个指令安装的pip会出现CV2版本与python安装的版本,不匹配导致,你安装的opencv不成功,个人示例: 1.先更新pip python -m pip install --upgrade pip 2.从...

    通常由俩种方式,一种使用pip,无需选择opencv版本;一种手动选择opencv版本,使用whl文件下载

    一. pip自动下载

    pip install opencv-python
    

    大多数的情况下,是可以的安装成功CV2,可是有时,这个指令安装的pip会出现CV2版本与python安装的版本,不匹配导致,你安装的opencv不成功,由于国外的网路问题,可以加入 -i 指定国内源

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    
    阿里云:http://mirrors.aliyun.com/pypi/simple/
    
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    
    华中理工大学:http://pypi.hustunique.com/
    
    山东理工大学:http://pypi.sdutlinux.org/ 
    

    二. 下载whl文件,手动选择opencv版本

    1.先更新pip

    python -m pip install --upgrade pip  
    

    2.从清华源中选择对应的opencv版本,中下载其他版本的库,因为根据安装的python 版本下载相应的镜像文件
    比如 python 3.5.4 64bit
    我下载的是

    opencv_python-3.1.0.0-cp35-cp35m-win_amd64.whl
    

    3.下载完成后,在whl文件对应的目录下,cmd 到whl对应文件目录下,执行

    pip install opencv_python-3.1.0.0-cp35-cp35m-win_amd64.whl
    
    展开全文
  • cv2.erode()腐蚀:将前景物体变小,理解成将图像断开裂缝变大(在图片上画上黑色印记,印记越来越大) dst = cv.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) cv2.dilate()...

    cv2.erode()腐蚀:将前景物体变小,理解成将图像断开裂缝变大(在图片上画上黑色印记,印记越来越大)

    dst = cv.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

    cv2.dilate()膨胀:将前景物体变大,理解成将图像断开裂缝变小(在图片上画上黑色印记,印记越来越小)

    dst = cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]])

    kernel:structuring element used for dilation; if elemenat=Mat(), a 3 x 3 rectangular structuring element is used. Kernel can be created using getStructuringElement

    cv2.getStructuringElement()

    这个函数的第一个参数表示内核的形状,有三种形状可以选择。

    矩形:MORPH_RECT;

    交叉形:MORPH_CROSS;

    椭圆形:MORPH_ELLIPSE;

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))  # 椭圆结构
    kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (3, 3))  # 十字结构
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))  # 矩形结构

    第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得

    getStructuringElement函数的返回值: 对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心点。element形状唯一依赖锚点位置,其他情况下,锚点只是影响了形态学运算结果的偏移。

    代码:

    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))

    #!/usr/bin/env python3
    
    import cv2
    
    image = cv2.imread(r"meishaonv.jpg")
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imshow("Gray Image", gray)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
    eroded = cv2.erode(gray.copy(), kernel, 10)
    # eroded = cv2.erode(gray.copy(), None, 10)
    
    cv2.imshow("Eroded Image", eroded)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    #!/usr/bin/env python3
    
    import cv2
    
    image = cv2.imread(r"meishaonv.jpg")
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imshow("Gray Image", gray)
    
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
    dilated = cv2.dilate(gray.copy(), kernel, 10)
    # dilated = cv2.dilate(gray.copy(), None, 10)
    
    cv2.imshow("Dilated Image", dilated)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

     

    展开全文
  • 参考资料: 1、《Opencv2 Computer Vision Application Programming Cookbook》 2、《OpenCV References Manule》 3、OpenCV官方文档Contour部分 http://blog.csdn.net/jjddss/article/details/72674704 opencv3...

    版权提示:本文参考自 http://blog.csdn.net/sunny2038/article/details/12889059,素材也都取自这里,本文仅做部分修改。

    因为本文主要是参考sunny2038的这篇文档,如果转载请注意原出处。

    这篇文章主要介绍在Python中使用OpenCV检测并绘制轮廓。

     

    轮廓检测

    轮廓检测也是图像处理中经常用到的。OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓。

    实现

    使用方式如下:

    import cv2  
    
    img = cv2.imread("./test.jpg")  
    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  
    ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)  
    
    contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  
    cv2.drawContours(img,contours,-1,(0,0,255),3)  
    
    cv2.imshow("img", img)  
    cv2.waitKey(0)  
      


    需要注意的是cv2.findContours()函数接受的参数为二值图,即黑白的(不是灰度图),所以读取的图像要先转成灰度的,再转成二值图,参见4、5两行。第六行是检测轮廓,第七行是绘制轮廓。

    结果

    原图如下:

    检测结果如下:

    注意,findcontours函数会“原地”修改输入的图像。这一点可通过下面的语句验证:

    cv2.imshow("binary", binary)  
    contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)  
    cv2.imshow("binary2", binary)  

    执行这些语句后会发现原图被修改了。

    cv2.findContours()函数

    函数的原型为

    cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])  

    opencv2返回两个值:contours:hierarchy。注:opencv3会返回三个值,分别是img, countours, hierarchy

    参数

    • 第一个参数是寻找轮廓的图像;
    • 第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口):

        cv2.RETR_EXTERNAL     表示只检测外轮廓
        cv2.RETR_LIST                检测的轮廓不建立等级关系
        cv2.RETR_CCOMP          建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。
        cv2.RETR_TREE            建立一个等级树结构的轮廓。

    • 第三个参数method为轮廓的近似办法

        cv2.CHAIN_APPROX_NONE 存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1
        cv2.CHAIN_APPROX_SIMPLE 压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息
        cv2.CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS 使用teh-Chinl chain 近似算法

    返回值

    cv2.findContours()函数返回两个值,一个是轮廓本身,还有一个是每条轮廓对应的属性。

    contour返回值

    cv2.findContours()函数首先返回一个list,list中每个元素都是图像中的一个轮廓,用numpy中的ndarray表示。这个概念非常重要。在下面drawContours中会看见。通过

    print (type(contours))  
    print (type(contours[0]))  
    print (len(contours))  

     

    可以验证上述信息。会看到本例中有两条轮廓,一个是五角星的,一个是矩形的。每个轮廓是一个ndarray,每个ndarray是轮廓上的点的集合。

    由于我们知道返回的轮廓有两个,因此可通过

    cv2.drawContours(img,contours,0,(0,0,255),3)  

    cv2.drawContours(img,contours,1,(0,255,0),3)  

    分别绘制两个轮廓,关于该参数可参见下面一节的内容。同时通过

    print (len(contours[0]))  
    print (len(contours[1]))  

     

    输出两个轮廓中存储的点的个数,可以看到,第一个轮廓中只有4个元素,这是因为轮廓中并不是存储轮廓上所有的点,而是只存储可以用直线描述轮廓的点的个数,比如一个“正立”的矩形,只需4个顶点就能描述轮廓了。

    hierarchy返回值

    此外,该函数还可返回一个可选的hiararchy结果,这是一个ndarray,其中的元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。

    通过

    print (type(hierarchy))  
    print (hierarchy.ndim)  
    print (hierarchy[0].ndim)  
    print (hierarchy.shape)  

     

    可以看出,hierarchy本身包含两个ndarray,每个ndarray对应一个轮廓,每个轮廓有四个属性。

    轮廓的绘制

    OpenCV中通过cv2.drawContours在图像上绘制轮廓。 

    cv2.drawContours()函数

    cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset ]]]]]) 

     

    • 第一个参数是指明在哪幅图像上绘制轮廓;
    • 第二个参数是轮廓本身,在Python中是一个list。
    • 第三个参数指定绘制轮廓list中的哪条轮廓,如果是-1,则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度,如果是-1(cv2.FILLED),则为填充模式。绘制参数将在以后独立详细介绍。

    补充:

    http://blog.csdn.net/sunny2038/article/details/12889059博客提到,可用下面的方式计算得到轮廓的极值点,如下

    pentagram = contours[1] #第二条轮廓是五角星  
      
    leftmost = tuple(pentagram[:,0][pentagram[:,:,0].argmin()])  
    rightmost = tuple(pentagram[:,0][pentagram[:,:,0].argmin()])  
      
    cv2.circle(img, leftmost, 2, (0,255,0),3)   
    cv2.circle(img, rightmost, 2, (0,0,255),3)  

     

    注意!假设轮廓有100个点,OpenCV返回的ndarray的维数是(100, 1, 2)!!!而不是我们认为的(100, 2)。切记!!!人民邮电出版社出版了一本《NumPy攻略:Python科学计算与数据分析》,推荐去看一下。

     

    更新:关于pentagram[:,0]的意思

    在numpy的数组中,用逗号分隔的是轴的索引。举个例子,假设有如下的数组:

    a = np.array([[[3,4]], [[1,2]],[[5,7]],[[3,7]],[[1,8]]])  

     

    其shape是(5, 1, 2)。与我们的轮廓是相同的。那么a[:,0]的结果就是:

    [3,4], [1,2], [5,7], [3,7], [1,8]  

     

    这里a[:,0]的意思就是a[0:5,0],也就是a[0:5,0:0:2],这三者是等价的。

    回头看一下,a的shape是(5,1,2),表明是三个轴的。在numpy的数组中,轴的索引是通过逗号分隔的。同时冒号索引“:”表示的是该轴的所有元素。因此a[:, 0]表示的是第一个轴的所有元素和第二个轴的第一个元素。在这里既等价于a[0:5, 0]。

    再者,若给出的索引数少于数组中总索引数,则将已给出的索引树默认按顺序指派到轴上。比如a[0:5,0]只给出了两个轴的索引,则第一个索引就是第一个轴的,第二个索引是第二个轴的,而第三个索引没有,则默认为[:],即该轴的所有内容。因此a[0:5,0]也等价于a[0:5,0:0:2]。

    再详细一点,a的全体内容为:[[[3,4]], [[1,2]],[[5,7]],[[3,7]],[[1,8]]]。去掉第一层方括号,其中有五个元素,每个元素为[[3,4]]这样的,所以第一个索引的范围为[0:5]。注意OpenCV函数返回的多维数组和常见的numpy数组的不同之处!

    观察[[3,4]],我们发现其中只有一个元素,即[3, 4],第二个索引为[0:1]。

    再去掉一层方括号,我们面对的是[3,4],有两个元素,所以第三个索引的范围为[0:2]。

    再次强调一下OpenCVPython接口函数返回的NumPy数组和普通的NumPy数组在组织上的不同之处。

    参考资料:

    1、《Opencv2 Computer Vision Application Programming Cookbook》

    2、《OpenCV References Manule》

    3、OpenCV官方文档Contour部分

    http://blog.csdn.net/jjddss/article/details/72674704

    opencv3可能会报too many values to unpack (expected 2)的错误

    最近在OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓。

    根据网上的 教程,Python OpenCV的轮廓提取函数会返回两个值,第一个为轮廓的点集,第二个是各层轮廓的索引。但是实际调用时我的程序报错了,错误内容如下:too many values to unpack (expected 2)

    其实是接受返回值不符,如果你仅仅使用一个变量a去接受返回值,调用len(a),你会发现长度为3,也就是说这个函数实际上返回了三个值

    • 第一个,也是最坑爹的一个,它返回了你所处理的图像
    • 第二个,正是我们要找的,轮廓的点集
    • 第三个,各层轮廓的索引

    使用方式如下:

    import cv2    
        
    img = cv2.imread("./test.jpg")    
    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    
    ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)    
        
    contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)    
    cv2.drawContours(img,contours,-1,(0,0,255),3)    
        
    cv2.imshow("img", img)    
    cv2.waitKey(0)   

    运行时出现错误: ValueError: too many values to unpack

    原因:由于版本(使用的时3.2.0.7)问题 cv.findContours返回值个数发生变化,变为3个。因此应该为

    aa, ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  

    假如第一个参数不使用,可写成

    _, ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  

    拓展:

    ValueError: too many values to unpack 类错误,多为输入或者输出参数数量不一致导致。

    参考:

    http://blog.csdn.net/sunny2038/article/details/12889059

     

    展开全文
  • cv2.imread()和cv2.cvtColor() 的使用

    万次阅读 多人点赞 2019-04-01 16:52:35
    1、cv2.imread()接口读图像,读进来直接是BGR 格式数据格式在 0~255 需要特别注意的是图片读出来的格式是BGR,不是我们最常见的RGB格式,颜色肯定有区别。 2cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要...
  • 选择“Project comproject”菜单下的 “Project Interpreter”选修,点击右边的加号,install cv2第三方库。 没错就是这么简单啊哈哈哈哈哈哈,或者你cmd命令直接pip install 也行嗯 熟悉图像基本操作 项目目录如下...
  • cv2.resize()

    万次阅读 多人点赞 2019-09-28 18:48:29
    cv2.resize(InputArray src, OutputArray dst, Size, fx, fy, interpolation) 参数解释: InputArray src 输入图片 OutputArray dst 输出图片 Size 输出图片尺寸 fx, fy 沿x轴,y轴的...
  • edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 参数解释 image:源图像 threshold1:阈值1 threshold2:阈值2 apertureSize:可选参数,Sobel算子的大小 其中,...
  • ModuleNotFoundError: No module named 'cv2' (安装cv2

    万次阅读 多人点赞 2020-03-11 18:08:40
    1. 问题:ModuleNotFoundError: No module named 'cv2' (Pycharm 中import cv2出现错误) 2. 解决: 官网安装说明:https://pypi.org/project/opencv-python/
  • opencv-python中 boundingRect(cnt)以及cv2.rectangle用法

    万次阅读 多人点赞 2017-09-04 10:41:39
    转自 ... 矩形边框(Bounding Rectangle)是说,用一个最小的矩形,把找到的形状包起来。还有一个带旋转的矩形,面积会更...首先介绍下cv2.boundingRect(img)这个函数 这个函数很简单,img是一个二值图,也就是它的参数;
  • OpenCV_ cv2.imshow()

    万次阅读 多人点赞 2018-09-12 12:47:34
    cv2.imshow() cv2.imShow()函数可以在窗口中显示图像。该窗口和图像的原始大小自适应(自动调整到原始尺寸)。 第一个参数是一个窗口名称(也就是我们对话框的名称),它是一个字符串类型。第二个参数是我们的图像...
  • python opencv cv2.rectangle 参数含义

    万次阅读 多人点赞 2018-12-25 00:34:30
    因为做程序图像剪切一直不太明白是怎么切片的,这里就用 cv2.rectangle 这个函数来看一下 opencv 是怎么计量图像的坐标轴的。 opencv 官网上给出的 cv2.rectangle 函数定义 如下: Python: cv2.rectangle(img, pt1...
  • python 用pip安装cv2(超简单的一句话)

    万次阅读 多人点赞 2019-04-24 18:45:20
    如果你已经装好了pip,那就直接 pip install opencv-python 就可以了 打个小广告~~
  • Python安装cv2

    千次阅读 2020-01-30 17:40:26
    原文地址 因为有一个视频分帧取图片的,找到的教程多会用到import cv2,当我去pip ...OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,...
  • opencv cv2.imread()

    万次阅读 多人点赞 2019-07-12 10:20:30
    cv2.imread()用于读取图片文件 imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种: cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。 cv2.IMREAD_GRAYSCALE:以...
  • python下使用cv2.drawContours填充轮廓颜色

    万次阅读 多人点赞 2017-08-30 18:15:36
    在使用cv2.drawContours进行轮廓的颜色填充时要注意一点: (1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败。 (2)画轮廓线时:就没必要搞list了,直接contours[i]就可以。 ...
  • 主要有cv2.line()//画线, cv2.circle()//画圆, cv2.rectangle()//长方形,cv2.ellipse()//椭圆, cv2.putText()//文字绘制 主要参数 img:源图像 color:需要传入的颜色 thickness:线条的粗细,默认值是1...
  • opencv-contrib-Python编译module 'cv2.cv2' has no attribute 'xfeatures2d'引言解决步骤一解决步骤二 引言 opencv-contrib-Python编译出现错误: sift = cv.xfeatures2d.SIFT_create() cv2.error: OpenCV(3.4.3) C...
  • AttributeError: module ‘cv2.cv2’ has no attribute ‘ximgproc’ 1. AttributeError: module ‘cv2.cv2’ has no attribute ‘ximgproc’ Traceback (most recent call last): File "superpixel-inceptionV1On...
  • no module named cv2

    万次阅读 多人点赞 2019-03-16 10:56:09
    之前写过一篇关于import cv2 报错no module names cv2的文章,当时尝试了各种方法,才实验成功。有点乱。。。 这个问题真是因人而异,有些方法对于有些人好用,对于有些人不好用,所以,遇到这种问题,一定要把所有...
  • pycharm import cv2 : no module named cv2

    万次阅读 热门讨论 2017-08-29 20:26:18
    在win10上安装openCV-python后 20170828_windows10+openCV3.3+tensorflow1.3gpu版本+python3.6...在cmd命令行下python可以import cv2,但是pycharm下无法导入cv2 解决办法 确认pycharm的环境变量包含python的环境lib。
  • python如何安装cv2模块

    万次阅读 多人点赞 2019-07-01 19:34:51
      大家在第一次安装cv2 模块的时候可能会犯这样的错误,输入pip(3) install cv2命令后,vc2并没有开始安装,而是返回这样一个错误一个错误: Could not find a version that satisfies the requirement cv2 (from...
  • cv2.waitKey的入门级理解

    万次阅读 多人点赞 2020-05-22 02:19:19
    为什么cv2.imshow之后要跟cv2.waitkey 为什么要这么麻烦的设计 cv2.waitKey(1000) & 0xFF == ord('q') 是什么意思 cv2.waitkey和time.sleep的区别
  • 1. cv2.imread()- cv2.IMREAD_COLOR # 彩色图像 - cv2.IMREAD_GRAYSCALE # 灰色图像 - cv2.IMREAD_UNCHANGED
  • python图片叠加与融合,cv2.add与cv2.addWeighted的区别  目标 图像加法、减法、位运算 学习函数cv2.add(),cv2.addWeighted() 加法: 使用cv2.add()将两个图像相加,可以使用numpy中的矩阵加法来实现。但是在...
  • python 安装cv2

    万次阅读 2018-04-27 21:14:33
    pip install opencv-python 安装完进行图像读取时import cv2,会提示错误,只需要采用如下方式导入即可: import cv2.cv2 as cv2 cv2.imread()
  • python的cv2.warpAffine()和cv2.warpPerspective()解析对比

    万次阅读 多人点赞 2019-10-17 19:35:33
    1、cv2.warpAffine()放射变换函数,可实现旋转,平移,缩放;变换后的平行线依旧平行 cv2.warpAffine(src, M, dsize, dst=None, flags=None, borderMode=None, borderValue=None) --> dst src:输入图像 dst:...
  • cv2.boundingRect()和cv2.rectangle()

    千次阅读 2020-02-20 17:01:42
    cv2.boundingRect()和cv2.rectangle() cv2.boundingRect(img)这个函数可以获得一个图像的最小矩形边框一些信息,参数img是一个二值图像,它可以返回四个参数,左上角坐标,矩形的宽高,一般形式为: x,y,w,h = ...
  • cv2 imread()函数

    万次阅读 多人点赞 2020-11-07 16:30:25
    Reason     这两天学习OpenCV-Python时,也就是cv2库,读取图像时不时出现和预料之外的结果。于是作者从源头来考究一下cv2.imread...flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSC
  • 计算机视觉ComputerVision, CV)入门 转载: https://blog.csdn.net/weixin_40054912/article/details/80355034

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 594,089
精华内容 237,635
关键字:

cv2