• 三狮军团首秀 只有两千多球迷观战 2019-05-19
  • 人民网2017呼和浩特徒步迎新活动--内蒙古频道--人民网 2019-05-19
  • 【品牌资讯】环球网斩获“全国行业新闻网站传播力2017年6月榜”多项冠军 2019-05-15
  • 深化对经济工作主线的认识 从供需关系看供给侧结构性改革 2019-05-15
  • 格拉斯哥艺术学院起火 4年前曾遭火灾仍在整修 2019-05-14
  • 回复@地瓜干17世:猪临死才会嚎叫呢~ 2019-05-14
  • 婺源古村溪中发现鹰嘴龟 2019-05-08
  • 编辑评测:高夫净源控油平衡露 极速补水长效控油 2019-05-08
  • 四部门发文规范特色小镇建设防止“新瓶装旧酒” 2019-05-02
  • 【地球的盛会文明的聚会艺术的盛宴四海一家足球为人类和平幸福而荣耀!!!普京是当今人类世界最优秀的一代伟人俄罗斯赢啦!!!】 2019-04-29
  • 学习新思想,千万师生同上一堂课 2019-04-28
  • 你这种个体户都干不了的老蚕也配谈计划?真是笑死人不偿命哦? 2019-04-23
  • 感人!的哥带着患病父亲出车 孝心感动乘客 2019-04-23
  • 图解:习近平在纪念马克思诞辰200周年大会上讲话的16个金句 2019-04-16
  • 感触名家笔下的端午文化 吃香粽原来可以这样"文艺" 2019-04-16
  • 山西十一选五开奖:opencv与numpy的图像基本操作

    山西体彩11选5直选遗漏 www.caxru.com  更新时间:2019年03月08日 10:34:38   作者:邹成卓   我要评论

    这篇文章主要介绍了opencv与numpy的图像基本操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    1. 像素基本操作

    1.1 读取、修改像素

    可以通过[行,列]坐标来访问像素点数据,对于多通道数据,返回一个数组,包含所有通道的值,对于单通道数据(如gray),返回指定坐标的值,也可以通过 [行,列,通道index] 来访问某坐标某通道的值。

    >>> import cv2
    >>> import numpy as np
    >>> img = cv2.imread('messi5.jpg')
    >>> px = img[100,100]
    >>> print( px )
    [157 166 200]
    # accessing only blue pixel
    >>> blue = img[100,100,0]
    >>> print( blue )
    157

    可以直接通过坐标修改像素值

    >>> img[100,100] = [255,255,255]
    >>> print( img[100,100] )
    [255 255 255]

    然而直接像上面这样去读取、修改每个像素的值,效率是比较低的,可以使用下面的方法,效率是更高的

    # accessing RED value
    >>> img.item(10,10,2)
    59
    # modifying RED value
    >>> img.itemset((10,10,2),100)
    >>> img.item(10,10,2)
    100

    1.2 读取图像属性

    读取图像尺寸,返回一个元组 (行,列,通道数)

    >>> print( img.shape )
    (342, 548, 3)

    读取像素大小, 行 通道数

    >>> print( img.size )
    562248

    像素数据类型

    >>> print( img.dtype )
    uint8

    1.3 图像ROI操作

    可以直接编辑像素区域,例如把图像左下角50*50的像素复制到左上角

    import cv2
    import numpy as np
    img = cv2.imread("test.jpg")
    print(img.shape)
    roiTest = img[475:525, 0:50]
    img[0:50, 0:50] = roiTest
    cv2.imshow("image",img)
    cv2.waitKey(0)

    1.4 分割、合并通道

    有些情况下需要对图像的某一通道数据进行操作,此时会用到分割、合并通道数据

    >>> b,g,r = cv2.split(img)
    >>> img = cv2.merge((b,g,r))

    或者

    b = img[:,:,0]

    假设想编辑红色通道的数据,全部设置为0,不需要这样分割后编辑, img[:,:,2] = 0 这样即可。cv2.split操作是一个很耗时的操作,可以用numpy索引替代的操作,尽量用numpy索引来做。

    1.4 生成图像边框

    使用 cv2.copyMakeBorder 函数可添加图像边框,支持多种边框算法

    void cv::copyMakeBorder ( 
    InputArray src, //原图
    //目标图(cpp版本中,若传入此数据且选BORDER_TRANSPARENT,则此数据被top/bottom/left/right切出来的roi部分不会被做任何修改,此图像大小=dst.rows+top+bottom,dst.cols+left+right)
    OutputArray dst, 
    int top, //top/left/bottom/right 四个方向上的边框像素
    int bottom,
    int left,
    int right,
    int borderType, //边框类型见下图
    const Scalar & value = Scalar() //边框类型为BORDER_CONSTANT时的边框像素
    ) 

    BLUE = [255, 0, 0]
     img1 = cv2.imread("test.jpg")
     replicate = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REPLICATE)
     reflect = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT)
     reflect101 = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_REFLECT_101)
     wrap = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_WRAP)
     constant = cv2.copyMakeBorder(img1, 100, 100, 100, 100, cv2.BORDER_CONSTANT, value=BLUE)
     print(img1.shape, reflect.shape)
     plt.subplot(231), plt.imshow(img1, 'gray'), plt.title('ORIGINAL')
     plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
     plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
     plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
     plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
     plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
     plt.show()

     

    上面的例子可以比较直观的看到各种border的效果,同时也能发现,python版的api与cpp版本的相比,默认初始化了一块原始图尺寸+各方向边框尺寸的图像内存,作为内置的dst参数。

    输出尺寸:(525, 700, 3) (725, 900, 3)

    2. 图像的基本算术操作

    2.1 图像相加

    图像相加,两个图像应该有相同的shape,或者图像和一个标量相加,或者图像和一个与其通道数相同的一维数组相加。

    opencv的相加与numpy相加时,在超出数据类型范围时的处理不同

    >>> x = np.uint8([250])
    >>> y = np.uint8([10])
    >>> print( cv2.add(x,y) ) # 250+10 = 260 => 255
    [[255]]
    >>> print( x+y )  # 250+10 = 260 % 256 = 4
    [4]

    cpp版本的api还支持mask等参数

    void cv::add ( 
    InputArray src1,
    InputArray src2,
    OutputArray dst,
    InputArray mask = noArray(),
    int dtype = -1 
    ) 

    2.2 图像混合

    opencv通过 cv::addWeighted 函数提供了将两个图像混合在一起的方法

    dst=α⋅img1+β⋅img2+γ

    img1 = cv2.imread('ml.png')
    img2 = cv2.imread('opencv-logo.png')
    dst = cv2.addWeighted(img1,0.7,img2,0.3,0)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    通过cv2.seamlessClone函数还能做更精细的图像局部融合。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    相关文章

  • 详解将Django部署到Centos7全攻略

    详解将Django部署到Centos7全攻略

    这篇文章主要介绍了详解将Django部署到Centos7全攻略,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • wxPython窗口的继承机制实例分析

    wxPython窗口的继承机制实例分析

    这篇文章主要介绍了wxPython窗口的继承机制,较为详细的讲述了wxPython窗口的继承机制及相关用法,并对其中的易错点进行了简单的分析,需要的朋友可以参考下
    2014-09-09
  • django的登录注册系统的示例代码

    django的登录注册系统的示例代码

    这篇文章主要介绍了django的登录注册系统的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Django开发的简易留言板案例详解

    Django开发的简易留言板案例详解

    这篇文章主要介绍了Django开发的简易留言板,结合实例形式详细分析了基于Python框架Django开发留言板的具体文件结构、流程步骤与相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • python实现网页自动签到功能

    python实现网页自动签到功能

    这篇文章主要为大家详细介绍了python实现网页自动签到功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python实现折半查找和归并排序算法

    python实现折半查找和归并排序算法

    这篇文章主要介绍了python实现折半查找和归并排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 最新评论

    常用在线小工具

  • 三狮军团首秀 只有两千多球迷观战 2019-05-19
  • 人民网2017呼和浩特徒步迎新活动--内蒙古频道--人民网 2019-05-19
  • 【品牌资讯】环球网斩获“全国行业新闻网站传播力2017年6月榜”多项冠军 2019-05-15
  • 深化对经济工作主线的认识 从供需关系看供给侧结构性改革 2019-05-15
  • 格拉斯哥艺术学院起火 4年前曾遭火灾仍在整修 2019-05-14
  • 回复@地瓜干17世:猪临死才会嚎叫呢~ 2019-05-14
  • 婺源古村溪中发现鹰嘴龟 2019-05-08
  • 编辑评测:高夫净源控油平衡露 极速补水长效控油 2019-05-08
  • 四部门发文规范特色小镇建设防止“新瓶装旧酒” 2019-05-02
  • 【地球的盛会文明的聚会艺术的盛宴四海一家足球为人类和平幸福而荣耀!!!普京是当今人类世界最优秀的一代伟人俄罗斯赢啦!!!】 2019-04-29
  • 学习新思想,千万师生同上一堂课 2019-04-28
  • 你这种个体户都干不了的老蚕也配谈计划?真是笑死人不偿命哦? 2019-04-23
  • 感人!的哥带着患病父亲出车 孝心感动乘客 2019-04-23
  • 图解:习近平在纪念马克思诞辰200周年大会上讲话的16个金句 2019-04-16
  • 感触名家笔下的端午文化 吃香粽原来可以这样"文艺" 2019-04-16
  • 新时时彩停售 重庆时时彩网址大全 北京赛车冠亚大小技巧 双色球开奖结果历史 顶呱刮彩票怎么兑奖 3d试机号后分析 2018海南环岛赛时间 3d走势图爱彩网 中国足彩网手机版 浙江快乐12开奖结果 体彩大乐透中奖规则 北京pk10绝对作假 高频彩单双 澳客网足球竟彩比分 广东彩票管理中心 南国彩票论坛