python学习图像处理_python图像处理机器学习 - CSDN
  • 图像的基本处理 读取图片 颜色空间转换 获取图片属性 缩放图片 平移图片 旋转图片 仿射变换 图像颜色变换 通道的拆分/合并处理 图片添加边距 import numpy as np import cv2 as cv # OpenCv库...

    图像的基本处理



    1. 读取图片
    2. 保存图片
    3. 颜色空间转换
    4. 获取图片属性
    5. 缩放图片
    6. 平移图片
    7. 旋转图片
    8. 仿射变换
    9. 通道的拆分/合并处理
    10. 图片添加边距


    import numpy as np
    import cv2 as cv        # OpenCv库
    
    # 为了一直显示图片  在显示图片后加上
    cv.waitKey(0)                 # 等待输入  一直显示当前图片
    
    # 销毁所有窗口
    cv.destroyAllWindows()

    1、读取图片

    img = cv.imread(r".\1.png")     # 相对路径
    # 这里用的相对路径  当然也可以用绝对路径

    函数解析:

    可以go to declaration查看使用说明


    函数原型:
    def imread(filename, flags=None): # real signature unknown; restored from doc
    参数含义:
    @param filename Name of file to be loaded.
    @param flags Flag that can take values of cv::ImreadModes


    参数说明:

    1. filename没什么可说的,绝对地址或者相对地址
    2. 重点说明一下flags参数

    Enumerator

    1. IMREAD_UNCHANGED:不进行转化,比如保存为了16位的图片,读取出来仍然为16位。
      If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
    2. IMREAD_GRAYSCALE :进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1
      If set, always convert image to the single channel grayscale image.
    3. IMREAD_COLOR :进行转化为三通道图像。
      If set, always convert image to the 3 channel BGR color image.
    4. IMREAD_ANYDEPTH :如果图像深度为16位则读出为16位,32位则读出为32位,其余的转化为8位。
      If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
    5. IMREAD_ANYCOLOR
      If set, the image is read in any possible color format.
    6. IMREAD_LOAD_GDAL 使用GDAL驱动读取文件,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。
      If set, use the gdal driver for loading the image.


    1、If the image cannot be read (because of missing file, improper permissions, unsupported or invalid format), the function returns an empty matrix ( Mat::data==NULL ).
    翻译过来,当由于某种原因读取不到文件时,返回空矩阵!
    2、该函数支持的文件类型:
    . - Windows bitmaps - *.bmp, *.dib (always supported)
    . - JPEG files - *.jpeg, *.jpg, *.jpe (see the Notes section)
    . - JPEG 2000 files - *.jp2 (see the Notes section)
    . - Portable Network Graphics - *.png (see the Notes section)
    . - WebP - *.webp (see the Notes section)
    . - Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
    . - Sun rasters - *.sr, *.ras (always supported)
    . - TIFF files - *.tiff, *.tif (see the Notes section)
    . - OpenEXR Image files - *.exr (see the Notes section)
    . - Radiance HDR - *.hdr, *.pic (always supported)
    . - Raster and Vector geospatial data supported by Gdal (see the Notes section)
    3、注意点:
    (1)、 The function determines the type of an image by the content, not by the file extension.
    读取的图片的形式是由图片本身的内容决定,而不是由图片的后缀名决定
    (2)、In the case of color images, the decoded images will have the channels stored in B G R order.
    (3)、其他

    2、保存图片

    3、颜色转换

    使用cvtColor函数


    函数作用:
      The function converts an input image from one color space to another. In case of a transformation to-from RGB color space, the order of the channels should be specified explicitly (RGB or BGR)(指定输入图像颜色空间类型).
      Note that the default color format in OpenCV is often referred to as RGB but it is actually BGR (the bytes are reversed).
      So the first byte in a standard (24-bit) color image will be an 8-bit Blue component, the second byte will be Green, and the third byte will be Red. The fourth, fifth, and sixth bytes would then be the second pixel (Blue, then Green, then Red), and so on.
    OpenCv默认的颜色制式是BGR而非RGB。
    . The conventional ranges for R, G, and B channel values are:
    . - 0 to 255 for CV_8U images
    . - 0 to 65535 for CV_16U images
    . - 0 to 1 for CV_32F images

    对于线性变换来说,这些取值范围是无关紧要的。
    但是对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,
      例如从RGB->L*u*v转换。如果从一个8-bit类型图像不经过任何缩放(scaling)直接转换为32-bit浮点型图像,函数将会以0-255的取值范围来取代0-1的取值范围,所以在使用cvtColor函数之前需要对图像进行缩放

    img *= 1./255;
    cvtColor(img, img, CV_BGR2Luv);

    如果对8-bit图像使用cvtColor()函数进行转换将会由一些信息丢失。函数可以做下面类型的转换,需要说明的是在opencv2.x时颜色空间转换code用的宏定义是CV_前缀开头,而在opencv3.x版本其颜色空间转换code宏定义更改为COLOR_开头,而经验证,2.4.13版本中opencv同事支持这两种形式的写法。故下面表格会将两种code类型同时列出,以供参考:
    这里写图片描述

    这里列出的类型并不齐全,但是对于一般的图像处理已经够用。需要特别说明的是RGB–>GRAY的转换是我们常用的转换格式,其转换公式如下:

    这里写图片描述

    上图中出现的RGBA格式图片,RGBA是代表Red(红色)、Green(绿色)、Blue(蓝色)和Alpha的色彩空间。虽然它有时候被描述为一个颜色空间,但是它其实是RGB模型附加了额外的信息,可以属于任何一种RGB颜色空间。Alpha参数一般用作不透明度参数,如果一个像素的alpha通道数值为0%,那它就是完全透明的也就是肉眼不可见,而数值为100%则意味着一个完全不透明的像素,传统的数字图像就是alpha值为100%。
    需要注意的是cvtColor()函数不能直接将RGB图像转换为二值图像(Binary Image),需要借助threshold()函数,其具体用法请查阅threshold().

    代码如下:

    # 使用opencv读取图像,直接返回numpy.ndarray 对象,通道顺序为BGR ,注意是BGR,通道值默认范围0-255。
    img = cv.imread(r".\1.png")     # 相对路径
    cv.imshow("IMAGE_BGR",img)       # 在Image窗口中显示图片img
    
    img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)   # 将彩色图像转换为灰度图像
    img_hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)     # 将彩色图像转换为HSV图像
    cv.imshow("IMAGE_GRAY",img_gray)
    cv.imshow("IMAGE_HSV", img_hsv)


    函数原型:

    def cvtColor(src, code, dst=None, dstCn=None): # real signature unknown; restored from doc

    参数意义:

    . @param src input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC… ), or single-precision
    . floating-point.
    . @param dst output image of the same size and depth as src.
    . @param code color space conversion code (see #ColorConversionCodes).
    . @param 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.


    4、获得图片属性:

    sp = img.shape    # 图片的大小  像素 高  宽    通道数  
    # sp[0] 高
    # sp[1] 宽
    # sp[2] 通道数
    img.size     # 像素点个数
    

    5、缩放图片:

    size = img_gray.shape
    temping = cv.resize(img_gray,((int)(size[1]*0.1),(int)(size[0]*0.5)),interpolation=cv.INTER_LINEAR)
    # 等同上述一行代码
    temping = cv.resize(img_gray,None, fx=0.5, fy=0.5, interpolation=cv.INTER_LINEAR)
    cv.imshow('img_gray2',temping)

    6、平移图片

    rows,cols = img_gray.shape
    
    M = np.float32([[1,0,100],[0,1,50]])
    dst = cv.warpAffine(img,M,(cols,rows))
    
    cv.imshow('img_gray3',dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

    7、旋转图片

    rows,cols = img_gray.shape
    
    M = cv.getRotationMatrix2D((cols/2,rows/2),90,1)
    dst = cv.warpAffine(img,M,(cols,rows))
    
    cv.imshow('img_gray4',dst)

    8、仿射变换

    rows,cols,ch = img.shape
    
    pts1 = np.float32([[50,50],[200,50],[50,200]])
    pts2 = np.float32([[10,100],[200,50],[100,250]])
    
    M = cv.getAffineTransform(pts1,pts2)
    
    dst = cv.warpAffine(img,M,(cols,rows))
    
    cv.imshow('image',dst)

    9、通道的拆分/合并处理

    b,g,r = cv.split(img)
    img = cv.merge((b,g,r))

    10、图片添加边距

    未完待续!!!

    展开全文
  • Python图像处理

    2008-01-18 12:11:00
    Python图像处理 最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再...
    用Python做图像处理
    id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=&cid=251602&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110">
           最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型开发再好不过了。在 Python 中,比较常用的图像处理库是 PIL(Python Image Library),当前版本是 1.1.6 ,用起来非常方便。大家可以在 http://www.pythonware.com/products/pil/index.htm 下载和学习。
           在这里,我主要是介绍一下做图像识别时可能会用到的一些 PIL 提供的功能,比如图像增强、还有滤波之类的。最后给出使用 Python 做图像处理与识别的优势与劣势。
    基本图像处理
           使用 PIL 之前需要 import Image 模块:
    import Image
           然后你就可以使用Image.open(‘xx.bmp’) 来打开一个位图文件进行处理了。打开文件你不用担心格式,也不用了解格式,无论什么格式,都只要把文件名丢给 Image.open 就可以了。真所谓 bmp、jpg、png、gif……,一个都不能少。
    img = Image.open(‘origin.png’)    # 得到一个图像的实例对象 img
    1原图
           图像处理中,最基本的就是色彩空间的转换。一般而言,我们的图像都是 RGB 色彩空间的,但在图像识别当中,我们可能需要转换图像到灰度图、二值图等不同的色彩空间。 PIL 在这方面也提供了极完备的支持,我们可以:
    new_img = img.convert(‘L’)
    把 img 转换为 256 级灰度图像, convert() 是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:
    · 1 (1-bit pixels, black and white, stored with one pixel per byte)
    · L (8-bit pixels, black and white)
    · P (8-bit pixels, mapped to any other mode using a colour palette)
    · RGB (3x8-bit pixels, true colour)
    · RGBA (4x8-bit pixels, true colour with transparency mask)
    · CMYK (4x8-bit pixels, colour separation)
    · YCbCr (3x8-bit pixels, colour video format)
    · I (32-bit signed integer pixels)
    · F (32-bit floating point pixels)
    怎么样,够丰富吧?其实如此之处,PIL 还有限制地支持以下几种比较少见的色彩模式:LA (L with alpha), RGBX (true colour with padding) and RGBa (true colour with premultiplied alpha)。
    下面看一下 mode 为 ‘1’、’L’、’P’时转换出来的图像:
    2 mode = '1'
    3 mode = 'L'
    4 mode = 'P'
    convert() 函数也接受另一个隐含参数 matrix,转换矩阵 matrix 是一个长度为4 或者16 tuple。下例是一个转换 RGB 空间到 CIE XYZ 空间的例子:
        rgb2xyz = (
            0.412453, 0.357580, 0.180423, 0,
            0.212671, 0.715160, 0.072169, 0,
            0.019334, 0.119193, 0.950227, 0 )
        out = im.convert("RGB", rgb2xyz)
           除了完备的色彩空间转换能力外, PIL 还提供了resize()、rotate()等函数以获得改变大小,旋转图片等几何变换能力,在图像识别方面,图像实例提供了一个 histogram() 方法来计算直方图,非常方便实用。
    图像增强
           图像增强通常用以图像识别之前的预处理,适当的图像增强能够使得识别过程达到事半功倍的效果。 PIL 在这方面提供了一个名为 ImageEnhance 的模块,提供了几种常见的图像增强方案:
    import ImageEnhance
    enhancer = ImageEnhance.Sharpness(image)
    for i in range(8):
        factor = i / 4.0
        enhancer.enhance(factor).show("Sharpness %f" % factor)
    上面的代码即是一个典型的使用 ImageEnhance 模块的例子。 Sharpness 是 ImageEnhance 模块的一个类,用以锐化图片。这一模块主要包含如下几个类:Color、Brightness、Contrast和Sharpness。它们都有一个共同的接口 .enhance(factor) ,接受一个浮点参数 factor,标示增强的比例。下面看看这四个类在不同的 factor 下的效果
    5 使用Color 进行色彩增强,factor 取值 [0, 4],步进 0.5
    6 用 Birghtness 增强亮度,factor取值[0,4],步进0.5
    7用 Contrast 增强对比度, factor 取值 [0,4],步进0.5
    8用 Sharpness 锐化图像,factor取值 [0,4],步进0.5
    图像 Filter
           PIL 在 Filter 方面的支持是非常完备的,除常见的模糊、浮雕、轮廓、边缘增强和平滑,还有中值滤波、ModeFilter等,简直方便到可以做自己做一个Photoshop。这些 Filter 都放置在 ImageFilter 模块中,ImageFilter主要包括两部分内容,一是内置的 Filter,如 BLUR、DETAIL等,另一部分是 Filter 函数,可以指定不同的参数获得不同的效果。示例如下:
    import ImageFilter
    im1 = im.filter(ImageFilter.BLUR)
    im2 = im.filter(ImageFilter.MinFilter(3))
    im3 = im.filter(ImageFilter.MinFilter()) # same as MinFilter(3)
    可以看到 ImageFilter 模块的使用非常简单,每一个 Filter 都只需要一行代码就可调用,开发效率非常高。
     
    9使用 BLUR
    10使用 CONTOUR
    11使用 DETAIL
    12使用 EMBOSS
    13使用 EDGE_ENHANCE
    14使用 EDGE_ENHANCE_MORE
    15使用 FIND_EDGES
    16使用 SHARPEN
    17使用 SMOOTH
    18使用 SMOOTH_MORE
           以上是几种内置的 Filter 的效果图,除此之外, ImageFilter 还提供了一些 Filter 函数,下面我们来看看这些可以通过参数改变行为的 Filter 的效果:
    19使用 Kernel(),参数:size = (3, 3), kernel = (0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5)
    20使用 MaxFilter,默认参数
    21使用 MinFilter,默认参数
    22使用 MedianFilter,默认参数
    23使用 ModeFilter,参数 size = 3
    24使用 RankFilter,参数 size = 3, rank = 3
    小结
           到此,对 PIL 的介绍就告一段落了。总的来说,对于图像处理和识别,PIL 内建了强大的支持,从各种增强算法到 Filter ,都让人无法怀疑使用 Python 的可行性。 Python唯一的劣势在于执行时间过慢,特别是当实现一些计算量大的算法时候,需要极强的耐心。我曾用 Hough Transform(霍夫变换)来查找图像中的直线,纯 Python 的实现处理一个 340 * 100 的图片也要花去数秒时间(P4 3.0G + 1G memory)。但使用 PIL 无需关注图像格式、内建的图像增强算法和 Filter 算法,这些优点使 Python 适合用于构造原型和进行实验,在这两方面Python 比 matlab 更加方便。商业的图像识别产品开发,可以考虑已经被 boost accepted的来自 adobe 的开源 C++ 库 gil,可以兼顾执行性能和开发效率。
    id="alimamaifrm" style="WIDTH: 750px; HEIGHT: 110px" border="0" name="alimamaifrm" marginwidth="0" marginheight="0" src="http://p.alimama.com/cpacode.php?t=A&pid=mm_10108440_0_0&w=750&h=110&rn=1&cn=3&ky=%CA%E9&cid=50000072&bgc=FFFFFF&bdc=E6E6E6&tc=0000FF&dc=000000" frameborder="0" width="750" scrolling="no" height="110">
    展开全文
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
    PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

    同时推荐作者的C++图像系列知识:
    [数字图像处理] 一.MFC详解显示BMP格式图片
    [数字图像处理] 二.MFC单文档分割窗口显示图片
    [数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
    [数字图像处理] 四.MFC对话框绘制灰度直方图
    [数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
    [数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
    [数字图像处理] 七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

    本篇文章作为第一篇,将讲解图像处理基础知识和OpenCV入门函数,知识点如下:
    1.图像基础知识
    2.OpenCV读写图像
    3.OpenCV像素处理

    PS: 文章也学习了网易云高登教育的知识,推荐大家学习。

    PSS:2019年1~2月作者参加了CSDN2018年博客评选,希望您能投出宝贵的一票。我是59号,Eastmount,杨秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

    五年来写了314篇博客,12个专栏,是真的热爱分享,热爱CSDN这个平台,也想帮助更多的人,专栏包括Python、数据挖掘、网络爬虫、图像处理、C#、Android等。现在也当了两年老师,更是觉得有义务教好每一个学生,让贵州学子好好写点代码,学点技术,"师者,传到授业解惑也",提前祝大家新年快乐。2019我们携手共进,为爱而生。

    一.图像基础知识

    图像都是由像素(pixel)构成的,即图像中的小方格,这些小方格都有一个明确的位置和被分配的色彩数值,而这些一小方格的颜色和位置就决定该图像所呈现出来的样子。像素是图像中的最小单位,每一个点阵图像包含了一定量的像素,这些像素决定图像在屏幕上所呈现的大小。

    图像通常包括二值图像、灰度图像和彩色图像。

    1.二值图像
    二值图像中任何一个点非黑即白,要么为白色(像素为255),要么为黑色(像素为0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127则设置为255,否则设置为0。

    2.灰度图像
    灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:
    (1) 浮点算法:Gray=R0.3+G0.59+B0.11
    (2) 整数方法:Gray=(R
    30+G59+B11)/100
    (3) 移位方法:Gray=(R28+G151+B77)>>8;
    (4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)
    (5) 仅取绿色:Gray=G;
    (6) 加权平均值算法:根据光的亮度特性,公式: R=G=B=R
    0.299+G*0.587+B0.144

    通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。改变象素矩阵的RGB值,来达到彩色图转变为灰度图。

    3.彩色图像
    彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。



    二.OpenCV读写图像

    本文主要使用Python2.7和OpenCV进行讲解,首先调用"pip install opencv-python"安装OpenCV库,如下图所示:

    1.读入图像
    OpenCV读图像主要调用下面函数实现:

    img = cv2.imread(文件名,[,参数])
    参数(1) cv2.IMREAD_UNCHANGED (图像不可变)
    参数(2) cv2.IMREAD_GRAYSCALE (灰度图像)
    参数(3) cv2.IMREAD_COLOR (读入彩色图像)
    参数(4) cv2.COLOR_BGR2RGB (图像通道BGR转成RGB)

    2.显示图像
    显示图像调用函数如下:

    cv2.imshow(窗口名, 图像名)

    3.窗口等待
    调用函数如下:

    cv2.waitKey(delay)
    键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。

    4.删除所有窗口
    调用函数如下:

    cv2.destroyAllWindows() 删除所有窗口
    cv2.destroyWindows() 删除指定的窗口

    5.写入图片
    调用函数如下:

    retval = cv2.imwrite(文件地址, 文件名)

    下面代码是读入图片并显示保存。

    # -*- coding:utf-8 -*-
    import cv2
    
    #读取图片
    img = cv2.imread("test.jpg")
    
    #显示图像
    cv2.imshow("Demo", img)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #写入图像
    cv2.imwrite("testyxz.jpg", img)
    

    输出结果如下图所示,并且在文件夹下保存了一张名为“testyxz.jpg”的图像。

    如果代码中没有watiKey(0)函数,则运行结果如下图所示:

    同时
    可以对代码进行升级,如下所示:

    #无限期等待输入
    k=cv2.waitKey(0)
    #如果输入ESC退出
    if k==27:
        cv2.destroyAllWindows()
    


    三.OpenCV像素处理

    1.读取像素
    灰度图像直接返回灰度值,彩色图像则返回B、G、R三个分量。注意OpenCV读取图像是BGR存储显示,需要转换为RGB再进行图像处理。

    灰度图像:返回值 = 图像(位置参数)
    eg: test=img[88,42]
    彩色图像:返回值 = 图像[位置元素, 0 | 1 | 2 ] 获取BGR三个通道像素
    eg: blue=img[88,142,0] green=img[88,142,1] red=img[88,142,2]

    2.修改图像
    修改图像如果是灰度图像则直接赋值新像素即可,彩色图像依次给三个值赋值即可。

    灰度图像:
    img[88,142] = 255
    彩色图像:
    img[88,142, 0] = 255
    img[88,142, 1] = 255
    img[88,142, 2] = 255
    彩色图像:方法二
    img[88,142] = [255, 255, 255]

    下面代码是获取像素及修改的操作。

    # -*- coding:utf-8 -*-
    import cv2
    
    #读取图片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    test = img[88,142]
    print test
    img[88,142] = [255, 255, 255]
    print test
    
    #分别获取BGR通道像素
    blue = img[88,142,0]
    print blue
    green = img[88,142,1]
    print green
    red = img[88,142,2]
    print red
    
    #显示图像
    cv2.imshow("Demo", img)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #写入图像
    cv2.imwrite("testyxz.jpg", img)
    

    输出结果如下所示:
    [158 107 64]
    [255 255 255]
    255
    255
    255

    下面代码是将行为100到200、列150到250的像素区域设置为白色。

    # -*- coding:utf-8 -*-
    import cv2
    
    #读取图片
    img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
    
    #该区域设置为白色
    img[100:200, 150:250] = [255,255,255]
    
    #显示图像
    cv2.imshow("Demo", img)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #写入图像
    cv2.imwrite("testyxz.jpg", img)
    

    运行结果如下图所示:

    希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。
    (By:Eastmount 2018-08-16 夜11点 https://blog.csdn.net/Eastmount/

    展开全文
  • 主要有四大类:Python学习、机器学习(图像处理)、网络渗透、考研相关 先来说说Python的学习: 貌似是前段时间用C#写一个获取网页源码,并解析得到需要的信息的工具的时候,网上资料说做爬虫和网页解析,...

    最近一段时间的精力分配有点混乱,关注的东西也比较乱,现在整理一下。


    主要有四大类:Python学习、机器学习(图像处理)、网络渗透、考研相关


    先来说说Python的学习:


        貌似是前段时间用C#写一个获取网页源码,并解析得到需要的信息的工具的时候,网上资料说做爬虫和网页解析,Python更适合,又发现Python最近很火,然后就入了Python的坑。大概花费了一、两天的时间搞定了IDE,一开始准备入手Vim和Gvim,装好后发现配置好复杂搞不定,而且Vim命令行的工作模式也不太适合我这样的小白。偶然发现我电脑里面竟然躺着Pycharm,然后就装了Pytharm,可以用python打印“Hello world!”了。玩了大概一周的时间,发现Pycharm启动起来比较慢,还比较臃肿。就切换到了Notepad++,在里面编写好代码之后在命令行里调试、运行,这个配合用起来比较顺手。


        对于Python解释器的选择也纠结了一段时间,网上查了资料,一开始看到资料说2.7版本的比较实用,依赖包比较完善、成熟;但是也说3.6代表未来,更适合现在学习。两个版本之间,我不知道选择那个恰当。后面偶然在知乎上面看到一篇讲Python能够做哪些好玩的事情的文章,提到了廖雪峰老师的Python的教程。点进去后,教程上面说2.7已经过时了,应该学习3.6;他的教程也很详细,然后我就根据教程开始了python3.6的学习。


        一开始学习的内容都是比较基础的东西,比如循环、判断、函数等,因为有C#的基础,理解起来并不困难。python不需要提前声明变量类型,用习惯了C家族,很不适应,还有用缩进而不是大括号来表示一块区域,这点也不是很适应。对着廖雪峰老师的教程,大概学习到了类和多线程这里,后面的web编程,因为我没有那方面的背景知识,看起来比较吃力,也就没有继续看下去了。Python特有的东西理解比较深刻的应该是dict、set、list、tuple,其他的感觉没有学到多少。另外,Python给我的感觉是:要解决某个实际问题的时候,掌握了Python基本的知识外,还应该要去学习具体的关于某个领域的包的用法,光学python基本知识,做不了太多的事情,这点跟大学时候的Matlab很相似。


        因为我一开始是想更好的解决网页抓取和获取网页信息的问题,才开始python的学习的。学习了一段基础知识后,就想要编写一个网页抓取的小工具了。我用的是requests+BeautifulSoup+re包,完成了一个简单的网页抓取、解析信息的工具。基本完成了预期的目标,有意思的是第一次用自己编写的工具抓取了近三万张图片,也改进了之前用c#编写的那个工具,很有成就感,有机会再写一篇文章把过程贴出来。


        另外,自去年自学了计算机网络基础后,我一直都想要试验搭载一个客户端-服务器聊天工具。python实现起来比较简单,用socket几句代码就可以实现,对照着网上的资料加上自己的理解,也实现了这个功能。


       比较坑爹的是,被编码错误这个问题坑了不少。获取到的数据输出到命令行或写入文件的时候经常都是一堆乱码,往往一个小工具用一两个小时就把基本的想法变现了,却不得不花费大半个晚上的时间来解决编码的问题。




    关于python学习的一些参考网址:
    http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 廖雪峰老师的python基础教程(比较适合有其他编程语言的新手入门)
    http://m.blog.csdn.net/article/details?id=71330834 Python文件读取(很全面、浅显易懂,推荐收藏)
    https://github.com/youfou/wxpy Python微信






    关于机器学习(图像处理):


        python学习中期的时候,加CSDN的python学习群的同时误加了他们的大数据学习群。里面有很多热心的大牛分享了一些大数据机器学习的文章,某个无聊的午后我拿出手机点了进去。感觉发现了新大陆,对机器学习的知识产生了好感。因为平时就对各种科幻电影痴迷,对机器学习、人工智能自然熟也很容易理解了。另外插一点小插曲,大学快毕业的时候在学校旧书店看到了一篇讲神经网络和人工智能的书,当时只翻了一点,一点也没看进去,但是它告诉了我,我痴迷的那些科幻镜头有变成现实的可能;几年过去了,还是没能忘记曾经翻过这本书。


        所以又入了机器学习的坑,但是对这块没有Python中毒那么深;毕竟要理解卷积神经网络、逻辑回归这样复杂的算法,对我这样工作了的学渣来说确实是一个很大的砍。所以目前仅处于隔岸观火、了解的阶段。


        为什么我会再机器学习后面的括号里面注明“图像处理”呢?是因为前段时间一个博士在读的朋友推荐了我一款识别花草的神器。对着你想要知道的花草拍张照片,过不了几秒它就能告诉你花草的名字,而且识别率超高,这引起了我极大的兴趣,晚上回宿舍就在网上查了它的实现算法,用的正是卷积神经网络。这个活生生的例子,让我见识到了机器学习在图像处理方面的威力。
      
       最近读了一篇讲解机器学习入门的干货,提到机器学习有两个方向,一是自然语言处理,另一个就是图像处理。自然语言处理方面,之前学Python玩微信聊天机器人的时候,调用了图灵机器人的接口,感觉它们的机器人离正常对话还差很多,很多时候回答的都不是想要的。所以目前来说还是图像处理的实用性比较好一些。


       机器学习方面,考虑到目前的情况,接下来应该不会再在这上面耗费太多的时间,对于学渣的我来说要搞定那些算法确实比较难,但是会保持一定的关注。闲暇得空的时候,琢磨一下这方面的经典算法权当寄托了。




    关于机器学习的一些参考网址:
    http://study.163.com/course/introduction/1003223001.htm 斯坦福CS231n—深度学习与计算机视觉,Fei Fei Li和两名助教一起上的课,很不错
    http://m.blog.csdn.net/article/details?id=71915183 简单粗暴地入门机器学习,上面提到的干货
    http://m.blog.csdn.net/article/details?id=71079440 机器学习十大常用算法(一)
    http://m.blog.csdn.net/article/details?id=52442636 机器学习十大常用算法(二)




    关于网络渗透:


       黑客和网络渗透方面的知识也是我一直想要了解的,去年自学计算机网络,也是有这一方面的原因。可是当我看完一本《计算机网络基础》后,发现除了了解了一些基本的原理知识(现在好像也记不了多少了)外,什么也做不了。比如我知道可以通过设置网卡为混杂模式,接受局域网上的包。但是却不知道如何去实现,也想要了解TCP的三次握手。网上说用sniffer可以实现,找了一堆都没有找到能用的,问了一个计算机科班出生的同学,不是从事这方面工作的,也不了解,后面也就不了了之了。


       前段时间,偶然在网上看到了一个讲解黑客技术的视频,提到了一款叫做Kail的linux发行版。然后在好奇心的驱使下,就给自己的电脑装了一个。装好之后,打开一看。“哇,这不就是我一直想要的工具吗?”然后又一道新世界的大门向我展开了。知道了Kail以及里面工具的名称,再加上去年学的理论知识,以及搜索引擎的帮助,没两天我就实现了之前一直想干的事情,不过仅仅出于对技术的兴趣,没做坏事。


       再往后面,做渗透的试验的时候,发现对于https的网站,解析软件就没法了,然后又研究了一下https的相关内容,目前还没有理解它的加密机理。感觉和机器学习一样,渗透方面的坑也是无穷无尽了。


       渗透测试和安全方面,既然已经开了一道门,在门外窥探了它的丰富多彩,先埋一颗种子,希望今后更进一步了解更多。






    关于安全、网络渗透的一些参考网址:
    http://www.jianshu.com/p/14c6a57fa5cf Kail linux 镜像制作及安装教程
    https://www.ubuntu.com/download/desktop/create-a-usb-stick-on-windows 制作U盘启动项教程
    http://www.kanxue.com/ 看雪论坛——国内安全论坛
    http://blog.csdn.net/jfmz6oFQMALUmv6f/article/details/51336058 微信扩展教程(从抓包分析开始)






    最后谈一下考研的一些纠结:


       高中几年填鸭式的学习,磨灭了我对学习的兴趣,所以大学成了学渣;工作后没有了大学那么些同龄的、好玩的小伙伴,对于不抽烟、喝酒打牌的我来说实在是太无聊了。闲暇时间除了睡觉、跑步,大部分时间只能看书、学习聊以自慰了。这样一个过程下来,渐渐的发现知识还是那么的有趣,特别是计算机和数学方面,研究的都是解决实际问题的方法,渐渐的培养起了这方面的兴趣。也燃起了学习的兴趣。所以有了考研的想法,希望能再给自己一次发自内心的、全心全意学习知识的机会。


      然后就开始看高等数学了,不过正如开篇提到的那样,精力和关注的东西有点乱,所以还没有完全静下心来往这个方向发力。


      最后,希望通过这篇文章的整理,对4、5月接触的知识有个大体的梳理,告诉自己时间去哪儿了;同时也希望自己把前面的几点放一放,专心把最后面的这件事情做好。






    关于学习和考研的一些链接:
    https://www.zhihu.com/question/21068499 考研数学经历分享
    https://www.zhihu.com/question/27952897 公开课大全


                                                                                                            2017年05月24日


























     

    展开全文
  • 目录 ...初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...

    目录

    1、导入库文件

    2、设计GUI

    3、调用摄像头

    4、实时图像处理

    4.1、阈值二值化

    4.2、边缘检测

    4.3、轮廓检测

    4.4、高斯滤波

    4.5、色彩转换

    4.6、调节对比度

    5、退出系统


    初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试有一定帮助,项目演示效果如下:

    1、导入库文件

    这里主要使用PySimpleGUI、cv2和numpy库文件,PySimpleGUI库文件实现GUI可视化,cv2库文件是Python的OpenCV接口文件,numpy库文件实现数值的转换和运算,均可通过pip导入。

    import PySimpleGUI as sg  #pip install pysimplegui
    import cv2  #pip install opencv-python
    import numpy as np #pip install numpy

    2、设计GUI

    基于PySimpleGUI库文件实现GUI设计,本项目界面设计较为简单,设计800X400尺寸大小的框图,浅绿色背景,主要由摄像头界面区域和控制按钮区域两部分组成。效果如下所示:

    GUI代码如下所示:

        #背景色
        sg.theme('LightGreen')
    
        #定义窗口布局
        layout = [
          [sg.Image(filename='', key='image')],
          [sg.Radio('None', 'Radio', True, size=(10, 1))],
          [sg.Radio('threshold', 'Radio', size=(10, 1), key='thresh'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(40, 15), key='thresh_slider')],
          [sg.Radio('canny', 'Radio', size=(10, 1), key='canny'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_a'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='canny_slider_b')],
          [sg.Radio('contour', 'Radio', size=(10, 1), key='contour'),
           sg.Slider((0, 255), 128, 1, orientation='h', size=(20, 15), key='contour_slider'),
           sg.Slider((0, 255), 80, 1, orientation='h', size=(20, 15), key='base_slider')],
          [sg.Radio('blur', 'Radio', size=(10, 1), key='blur'),
           sg.Slider((1, 11), 1, 1, orientation='h', size=(40, 15), key='blur_slider')],
          [sg.Radio('hue', 'Radio', size=(10, 1), key='hue'),
           sg.Slider((0, 225), 0, 1, orientation='h', size=(40, 15), key='hue_slider')],
          [sg.Radio('enhance', 'Radio', size=(10, 1), key='enhance'),
           sg.Slider((1, 255), 128, 1, orientation='h', size=(40, 15), key='enhance_slider')],
          [sg.Button('Exit', size=(10, 1))]
        ]
    
        #窗口设计
        window = sg.Window('OpenCV实时图像处理',
                   layout,
                   location=(800, 400),
                   finalize=True)

    3、调用摄像头

    打开电脑内置摄像头,将数据显示在GUI界面上,效果如下所示:

    代码如下所示:

        #打开内置摄像头
        cap = cv2.VideoCapture(0)
        while True:
            event, values = window.read(timeout=0, timeout_key='timeout')
    
            #实时读取图像
            ret, frame = cap.read()
    
            #GUI实时更新
            imgbytes = cv2.imencode('.png', frame)[1].tobytes()
            window['image'].update(data=imgbytes)
    
        window.close()

    4、实时图像处理

    4.1、阈值二值化

    进行阈值二值化操作,大于阈值values['thresh_slider']的,使用255表示,小于阈值values['thresh_slider']的,使用0表示,效果如下所示:

     代码如下所示:

    if values['thresh']:
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)[:, :, 0]
        frame = cv2.threshold(frame, values['thresh_slider'], 255, cv2.THRESH_BINARY)[1]

    4.2、边缘检测

    进行边缘检测,values['canny_slider_a']表示最小阈值,values['canny_slider_b']表示最大阈值,效果如下所示:

    代码如下所示:

    if values['canny']:
        frame = cv2.Canny(frame, values['canny_slider_a'], values['canny_slider_b'])

    4.3、轮廓检测

    轮廓检测是形状分析和物体检测和识别的有用工具,连接所有连续点(沿着边界)的曲线,具有相同的颜色或强度,效果如下所示:

     代码如下所示:

    if values['contour']:
        hue = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        hue = cv2.GaussianBlur(hue, (21, 21), 1)
        hue = cv2.inRange(hue, np.array([values['contour_slider'], values['base_slider'], 40]),
                          np.array([values['contour_slider'] + 30, 255, 220]))
        cnts= cv2.findContours(hue, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
        cv2.drawContours(frame, cnts, -1, (0, 0, 255), 2)
    

    4.4、高斯滤波

    进行高斯滤波,(21, 21)表示高斯矩阵的长与宽都是21,标准差取values['blur_slider'],效果如下所示:

     代码如下所示:

    if values['blur']:
        frame = cv2.GaussianBlur(frame, (21, 21), values['blur_slider'])
    

    4.5、色彩转换

    色彩空间的转化,HSV转换为BGR,效果如下所示:

     代码如下所示:

    if values['hue']:
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        frame[:, :, 0] += int(values['hue_slider'])
        frame = cv2.cvtColor(frame, cv2.COLOR_HSV2BGR)

    4.6、调节对比度

    增强对比度,使图像中的细节看起来更加清晰,效果如下所示:

      代码如下所示:

    if values['enhance']:
        enh_val = values['enhance_slider'] / 40
        clahe = cv2.createCLAHE(clipLimit=enh_val, tileGridSize=(8, 8))
        lab = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)
        lab[:, :, 0] = clahe.apply(lab[:, :, 0])
        frame = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)
    

    5、退出系统

    直接break即可跳出循环。

    if event == 'Exit' or event is None:
        break

    拓展学习:基于Python的人工智能美颜系统 

    请关注公众号,回复关键字:OpenCV实时图像处理,获取项目资源。

    展开全文
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 本文主要讲解图像傅里叶变换的相关内容,在数字图像处理中,有两个经典的变换被广泛应用——傅里叶变换和霍夫变换。其中,傅里叶变换主要是将时间域上的信号转变为频率域上的信号,用来进行图像除噪、图像增强等处理...
  • python数字图像处理

    2018-09-12 20:03:41
    这里博客是自己做的个系统整理,主要说的是python在数字图像处理方面的应用,主要用到的库有PIL和skimage PIL库 1、用python简单处理图片:打开、显示、保存图像 2、用python简单处理图片:图像通道、几何变换...
  • Python中进行图像处理可以使用的库有很多,本文主要介绍下面三个:OpenCV、PIL、 skimage。其中,OpenCV是图像处理中最强大的一个库,它的源代码是由C\C++写成的,所以原版的OpenCV可以与C、C++无缝结合。Python版...
  • python数字图像处理-图像的基本结构和基础知识一、python实现BMP图像的读取和显示BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式。...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 这些Python库提供了一种简单直观的方法来转换图像并理解底层数据。 今天的世界充满了数据,图像是这些数据的重要组成部分。但是,在使用它们之前,必须...Python是这些图像处理任务的绝佳选择,因为它作为一种科学...
  • 最近需要学习python图像处理方法,在这里简单的总结一下自己学到的一些图像处理的方法把~ 1.Python PIL库读取图像 import PIL from PIL import Image im = Image.open(filepath) 2.简单进行图像旋转 out = ...
  • Python 图像处理详解

    2013-01-22 18:10:58
    Python图像处理  最近在做一件比较 evil 的事情——验证码识别,以此来学习一些新的技能。因为我是初学,对图像处理方面就不太了解了,欲要利吾事,必先利吾器,既然只是做一下实验,那用 Python 来作原型...
  • 图像处理那首先要配个环境嘛,配环境真的是我长久以来的噩梦了,每次都会出现奇奇怪怪的问题,首先上网查找了一下,opencv这个库还是用的比较多的,如果想要使用C++来做图像处理的话,那么使用visual studio搭配...
  • 前面一篇文章我讲解了基于K-Means聚类的图像分割或量化处理,但突然发现世面上的文章讲解图像量化和采样代码的很缺乏,因此结合2015年自己的一篇文章,补充相关知识供同学们学习。基础性文章,希望对你有所帮助。...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 欢迎大家关注微信公众号:baihuaML,白话机器学习。 码字不易,如转载请私信我!! 在这里,我们一起分享AI的故事。...在使用python进行编程时,涉及到多个不同的图像处理库的选择,今天我们简单聊一聊...
1 2 3 4 5 ... 20
收藏数 70,908
精华内容 28,363
关键字:

python学习图像处理