• opencv基础教程 之 图像基础和绘图


    1,教程:感谢小强

    2,用argparse传参数来显示一张图片

    #!/usr/bin/python    #linux系统
    #coding=utf-8
    
    import cv2
    import argparse    #python很常用的一个自带包
    
    ap=argparse.ArgumentParser()    #先实例化一个argparse
    ap.add_argument("--image","-i",required=True,help="path to the image")    #调用argparse下的一个方法,这样我们就可以告诉程序,我们后面输入的参数是个什么参数,参数是:标签全称,简称,参数是不是必须的(required),action=“function”(可选参数),help:显示帮助信息
    args=vars(ap.parse_args())  #参数名和内容的键值对字典,这个直接记住吧,估计是让参数名和参数的实际值形成了一个字典,字典名字叫args
    
    image=cv2.imread(args["image"])    
    print "height",image.shape[0],"px"
    print "width",image.shape[1],"px"
    print "channels",image.shape[2]
    cv2.imshow("image",image)    #图像显示出来

    image[0:5,0:5,]=(0,0,255) #把图像y轴上0-5,x轴上0-5的像素变成红色,打印出来
    cv2.imshow("color",image)

      (h,w)=image.shape[:2]
      (cx,cy)=(w/2,h/2) #图像中心点

      t1=image[0:cy,0:cx]   #截取左上角的pic
      cv2.imshow("part1",t1)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

     3,opencv绘图

    #!/usr/bin/python
    #!coding=utf-8
    
    import numpy as np
    import cv2
    
    # 初始化一块400*600的画布(相当于生成一个numpy数组,也就是一幅图像),注意这里的画布是三通道的,也就是彩色图像
    canvas = np.zeros((400, 600, 3), dtype="uint8")    #注意400是高度y轴,600是宽度
    
    # 画一条绿线
    green = (0, 255, 0)
    # 起点(0, 0)至终点(600, 400),颜色绿色。PS.这里有一个默认参数,线宽默认为1个像素
    cv2.line(canvas, (0, 0), (600, 400), green,4)    #画布,开始坐标,终点坐标,线的颜色和线的粗细
    cv2.imshow("Canvas", canvas)    #显示出来瞅瞅
    cv2.waitKey(0)

    cv2.rectangle(canvas,(0,0),(15,150),green,1) #画矩形的函数:rectangle,需要的是指定原点(矩形的左上角)和矩形的水平宽度和高度,往后是线条颜色 和宽度,注意宽度是-1的时候表示填充
    cv2.imshow("Canvas", canvas) #显示出来瞅瞅
    cv2.waitKey(0)

     cv2.circle(canvas,(100,150),50,(255,255,255))    #画一个圆形,圆心坐标(x,y),半径50,颜色(255,255,255,)白色

     cv2.imshow("Canvas", canvas)
     cv2.waitKey(0)

    4,基础图像操作

      1 #!/usr/bin/python
      2 #coding=utf-8
      3 
      4 import sys
      5 import cv2
      6 
      7 import numpy as np
      8 
      9 input_file=sys.argv[1]
     10 img=cv2.imread(input_file)
     11 cv2.imshow('original',img)
     12 
     13 #裁剪图像,对shape函数不甚理解
     14 h,w=img.shape[:2]
     15 start_row,end_row=int(0.21*h),int(0.73*h)
     16 start_col,end_col=int(0.37*w),int(0.92*w)
     17 img_cro=img[start_row:end_row,start_col:end_col]
     18 cv2.imshow('img_cro',img_cro)
     19 
     20 #把图像的长宽都乘以1.3,对热死则函数和参数不甚理解
     21 scaling_factor=1.3
     22 img_scaled=cv2.resize(img,None,fx=scaling_factor,fy=scaling_factor,interpolation=cv2.INTER_LINEAR)
     23 cv2.imshow('scaled',img_scaled)
     24 
     25 #把图像变扁
     26 img_scaled=cv2.resize(img,(250,400),interpolation=cv2.INTER_AREA)
     27 cv2.imshow("skewe",img_scaled)
     28 cv2.waitKey()
     29 
     30 #图像保存到输出文件
     31 output_file=input_file[:4]+'__cropped.jpg'
     32 cv2.imwrite(output_file,img_cropped)
     33 
     34 cv2.waitKey()

     5,图像直方图均衡化

    目前不甚理解

    #!user/bin/python
    #!coding=utf-8
    
    import sys
    import cv2
    import numpy as np
    
    input_file=sys.argv[1]
    img=cv2.imread(input_file)
    
    img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    cv2.imshow("gray",img_gray)    #显示原图的灰度图
    
    #均衡灰度直方图
    img_gray_histeq=cv2.equalizeHist(img_gray)
    cv2.imshow('equlized',img_gray_histeq)    #不仅是灰色的,而且像是锐化过了,像素差别被增强了
    
    #目前直方图均衡化只适合亮度通道,所以彩色的图在均衡化之前需要转换到YUV色彩空间
    img_yuv=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
    #均衡y通道,感觉转换的是red通道
    img_yuv[:,:,0]=cv2.equalizeHist(img_yuv[:,:,0])
    #转换回bgr
    img_histeq=cv2.cvtColor(img_yuv,cv2.COLOR_YUV2BGR)
    cv2.imshow('input',img)    #这个是原图
    cv2.imshow('histeq',img_histeq)    #这个图感觉颜色被加深了,就是img_gray_histeq图带了颜色
    
    cv2.waitKey()

     

  • 相关阅读:
    ListView的CheckBox实现全部选中/不选中
    JTA 深度历险
    缓存更新的套路是怎样的?
    对ThreadLocal实现原理的一点思考
    透彻理解Spring事务设计思想之手写实现
    JAVA 线程池架构浅析
    ThreadPoolExecutor 线程池浅析
    MySql实现sequence功能的代码
    MySql事务select for update及数据的一致性处理讲解
    MySQL四种事务隔离级别详解
  • 原文地址:https://www.cnblogs.com/0-lingdu/p/9880420.html
Copyright © 2020-2023  润新知