设为首页 收藏本站
查看: 1570|回复: 0

[经验分享] Python + OpenCV2 系列:2

[复制链接]

尚未签到

发表于 2015-11-29 14:57:17 | 显示全部楼层 |阅读模式
  这些相当于我的学习笔记,所以并没有很强的结构性和很全的介绍,请见谅。
  

1 读取、写入图像
  下面是一个简短的载入图像、打印尺寸、转换格式及保存图像为.png的例子:



# -*- coding: utf-8 -*-
import cv2
import numpy as np

# 读入图像
im = cv2.imread('../data/empire.jpg')
# 打印图像尺寸
h, w = im.shape[:2]
print h, w
# 保存原jpg格式的图像为png格式图像
cv2.imwrite('../images/ch10/ch10_P210_Reading-and-Writing-Images.png',im)

  # 注:imread默认读取的是RGB格式,所以即使原图像是灰度图,读出来仍然是三个通道,所以,在imread之后可以添加参数
  # 注:这里是相对路径: \与/是没有区别的,‘’ 和 “” 是没有区别的。 ../表示返回到上一级目录下,./表示与该源码文件同一级目录下。
  
  
  "\"这种斜杠使用需要用转义字符,即"\\"表示单“\”。而“/” 不需要转义字符,即单个斜杠就可以了。
所以在使用时,形式如下:
im = cv2.imread('../data/empire.jpg')
im = cv2.imread('..\\data\\empire.jpg')
  
  
  # 注:函数imread()将图像返回为一个标准的NumPy数组。
  

1.1 相关注释

cv2.imread
  Python: cv2.imread(filename[, flags])

Parameters:


  • filename – Name of file to be loaded.
  • flags –  Flags specifying the color type of a loaded image:

    • CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
    • CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
    • CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
    • >0 Return a 3-channel color image.


      Note
      In the current implementation the alpha channel, if any, is stripped from the output image. Use negative value if you need the alpha channel.

    • =0 Return a grayscale image.   如果是灰度图就用这个就好了。例如:cv2.imread'../data/empire.jpg',0)
    • <0 Return the loaded image as is (with alpha channel).




  
  cv2.imwrite
  Python: cv2.imwrite(filename, img[, params])

Parameters:


  • filename – Name of the file.
  • image – Image to be saved.
  • params –  Format-specific save parameters encoded as pairs paramId_1, paramValue_1, paramId_2, paramValue_2, ... . The following parameters are currently supported:

    • For JPEG, it can be a quality ( CV_IMWRITE_JPEG_QUALITY ) from 0 to 100 (the higher is the better). Default value is 95.
    • For PNG, it can be the compression level ( CV_IMWRITE_PNG_COMPRESSION ) from 0 to 9. A higher value means a smaller size and longer compression time. Default value is 3.
    • For PPM, PGM, or PBM, it can be a binary format flag ( CV_IMWRITE_PXM_BINARY ), 0 or 1. Default value is 1.




  

2 图像RGB, HSV 通道分离



# Convert BGR to r,g,b
b,g,r = cv2.split(im)
# Convert BGR to HSV
image_hue_saturation_value = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(image_hue_saturation_value)
# Convert BGR to gray
image_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

  # 注:RGB channels is indexed in B G R which is different from matlab。
  # 注:Any channels could be split using cv2.split, pay attention to the sequence of channels

2.1 相关注释
  Python: cv2.split(m[, mv]) → mv

Parameters:


  • src – input multi-channel array.
  • mv – output array or vector of arrays; in the first variant of the function the number of arrays must match src.channels(); the arrays themselves are reallocated, if needed.


  
  Python: cv2.cvtColor(src, code[, dst[, dstCn]]) → dst

Parameters:


  • src – input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC... ), or single-precision floating-point.
  • dst – output image of the same size and depth as src.
  • code – color space conversion code (see the description below).
  • dstCn – number of channels in the destination image; if the parameter is 0, the number of the channels is derived automatically from src and code .


  
  

3 图像矩阵的操作(点乘,复制,截取,1到N维矩阵)



# mask seed 3D matrix
seed_mask_single_channel_list = np.array([[[1,0,0],[0,0,0],[0,0,0]],[[0,1,0],[0,0,0],[0,0,0]],[[0,0,1],[0,0,0],[0,0,0]],
                   [[0,0,0],[1,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,1],[0,0,0]],
                   [[0,0,0],[0,0,0],[1,0,0]],[[0,0,0],[0,0,0],[0,1,0]],[[0,0,0],[0,0,0],[0,0,1]]])
# cut image   
image_new_sample = image_source[:200,:200] #取前200个行和列的元素,python是从0开始的,所以0:200表示的是0-199这200个元素,取不到200.而初始位置0可以省略
#separate channel
mask_singel_channel = np.tile(seed_mask_single_channel_list[1],(70,70))[:200,:200] #第一个3*3的mask作为一个单元进行复制成为70行,70列,截取前200行,200列
single_channel_image = mask_singel_channel * image_new_sample #表示点乘
  # 注:矩阵的操作用Numpy这个类库进行。

3.1 相关注释
  numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

Parameters:

object : array_like

  An array, any object exposing the array interface, an object whose __array__ method returns an array, or any (nested) sequence.

  dtype : data-type, optional

  The desired data-type for the array. If not given, then the type will be determined as the minimum type required to hold the objects in the sequence. This argument can only be used to ‘upcast’ the array. For downcasting, use the .astype(t) method.

  copy : bool, optional

  If true (default), then the object is copied. Otherwise, a copy will only be made if __array__ returns a copy, if obj is a nested sequence, or if a copy is needed to satisfy any of the other requirements (dtype, order, etc.).

  order : {‘C’, ‘F’, ‘A’}, optional

  Specify the order of the array. If order is ‘C’ (default), then the array will be in C-contiguous order (last-index varies the fastest). If order is ‘F’, then the returned array will be in Fortran-contiguous order (first-index varies the fastest). If order is ‘A’, then the returned array may be in any order (either C-, Fortran-contiguous, or even discontiguous).

  subok : bool, optional

  If True, then sub-classes will be passed-through, otherwise the returned array will be forced to be a base-class array (default).

  ndmin : int, optional

  Specifies the minimum number of dimensions that the resulting array should have. Ones will be pre-pended to the shape as needed to meet this requirement.




Returns:

out : ndarray

  An array object satisfying the specified requirements.



  e.g.  最外层始终都是[],所以如果是1维就一个[],2维就2个,N维就N个



>>> np.array([1, 2, 3])
array([1, 2, 3])
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])
>>> np.array([1, 2, 3], ndmin=2)
array([[1, 2, 3]])
  
  numpy.tile(A, reps)


Parameters:

A : array_like

  The input array.

  reps : array_like

  The number of repetitions of A along each axis.




Returns:

c : ndarray

  The tiled output array



  e.g.



>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, 2)
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
>>> np.tile(b, (2, 1))
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-145001-1-1.html 上篇帖子: Python CMDB开发 下篇帖子: Python开发入门与实战14-基于Extjs的界面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表