• 我的学习笔记


    1. import cv2 as cv
    2. src = cv.imread("D:/kon.jpg")
    3. #给窗口起名字
    4. cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
    5. #展示窗口
    6. cv.imshow("input image",src)
    7. #等待输入窗口退出
    8. cv.waitKey(0)
    9. #销毁窗口
    10. cv.destroyAllWindows()
    11. print("hi python")

    打开摄像头捕获

    1. import cv2
    2. cv2.namedWindow('video',cv2.WINDOW_NORMAL)
    3. cv2.resizeWindow('video',640,480)
    4. # 打开摄像头
    5. cap=cv2.VideoCapture(0)
    6. # 数字代表索引如果有外部设备也是用数字代替
    7. # 循环读取摄像头的每一帧
    8. while True:
    9. # ret作为标记 true表示读到了 false表示没有读到
    10. ret,frame=cap.read()
    11. # 根据ret做判断
    12. if not ret:
    13. break
    14. cv2.imshow('video',frame)
    15. key=cv2.waitKey(0)
    16. if key & 0xFF ==ord('q'):
    17. break
    18. cap.release()
    19. cv2.destroyAllWindows()
    1. import cv2
    2. # 用相机捕获并保存 保存到该文件同一目录下
    3. cap=cv2.VideoCapture(0)
    4. fourcc=cv2.VideoWriter_fourcc(*'mp4v')
    5. # 创建videowriter
    6. # 最后一个括号的参数是相机的分辨率
    7. vw=cv2.VideoWriter('output.mp4',fourcc,30,(640,480))
    8. while cap.isOpened():
    9. ret,frame=cap.read()
    10. if not ret:
    11. break
    12. # 写每一帧数据
    13. vw.write(frame)
    14. cv2.imshow('frame',frame)
    15. if cv2.waitKey(1)==ord('q'):
    16. break
    17. cap.release()
    18. vw.release()
    19. cv2.destroyAllWindows()
    1. import cv2
    2. import numpy as np
    3. # trackbar的使用
    4. # 创建窗口
    5. cv2.namedWindow('trackbar',cv2.WINDOW_NORMAL)
    6. # 重新定义创建窗口的大小
    7. cv2.resizeWindow('trackbar',640,480)
    8. # 定义回调函数
    9. def callback(value):
    10. print(value)
    11. # 创建3个trackbar 像进度条一样的东西 可以拖动然后调节颜色
    12. cv2.createTrackbar('R','trackbar',0,255,callback)
    13. cv2.createTrackbar('G','trackbar',0,255,callback)
    14. cv2.createTrackbar('B','trackbar',0,255,callback)
    15. # 创建背景图片
    16. # 第一个参数要和窗口的大小一样
    17. img=np.zeros((480,640,3),np.uint8)
    18. while True:
    19. # 获取当前trackbar的值
    20. r=cv2.getTrackbarPos('R','trackbar')
    21. g = cv2.getTrackbarPos('G', 'trackbar')
    22. b = cv2.getTrackbarPos('B', 'trackbar')
    23. # 用获取到的三个值修改背景图片颜色
    24. img[:]=[b,g,r]
    25. # 要把图片在窗口中展示出来
    26. cv2.imshow('trackbar',img)
    27. key=cv2.waitKey(1)
    28. if key==ord('q'):
    29. break
    30. cv2.destroyAllWindows()

    cv2.imshow('trackbar',img)必须在窗口中显示

    1. import cv2
    2. def callback(value):
    3. pass
    4. cv2.namedWindow('color',cv2.WINDOW_NORMAL)
    5. cv2.resizeWindow('color',640,480)
    6. # 读取照片opencv默认读进来的照片是BGR的彩色空间
    7. # 是jpg不是jpeg导致程序错误
    8. img=cv2.imread('E:\My_Code\python\kon.jpg')
    9. # 定义颜色空间转换列表
    10. color_spaces=[
    11. # 所有颜色转换空间都是以COLOR开头
    12. # 2=to 转换的意思 因为opencv默认是BGR所以BGR写在前面
    13. cv2.COLOR_BGR2RGBA,cv2.COLOR_BGR2BGRA,
    14. cv2.COLOR_BGR2GRAY,cv2.COLOR_BGR2HSV,
    15. cv2.COLOR_BGR2YUV,
    16. ]
    17. # 设置trackbar 类似于进度条 只不过这次进度条的内容是颜色转换空间
    18. cv2.createTrackbar('trackbar','color',0,4,callback)
    19. while True:
    20. # 获取trackbar的值
    21. index=cv2.getTrackbarPos('trackbar','color')
    22. # 进行颜色空间转换
    23. cvt_img=cv2.cvtColor(img,color_spaces[index])
    24. cv2.imshow('color',cvt_img)
    25. key=cv2.waitKey(10)
    26. if key==ord('q'):
    27. break
    28. cv2.destroyAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 纯黑的一张照片
    4. img=np.zeros((200,200,3),np.uint8)
    5. # 分割通道
    6. # 因为图像是BGR分割出来就是3个所以需要3个参数接收
    7. b,g,r=cv2.split(img)
    8. # 修改一些颜色
    9. # 截取一部分让它为白色
    10. b[10:100,10:100]=255
    11. g[10:100,10:100]=255
    12. # 合并通道
    13. img2=cv2.merge((b,g,r))
    14. cv2.imshow('img',np.hstack((b,g)))
    15. # 两张图片横着拼在一起展示
    16. cv2.imshow('img2',np.hstack((img,img2)))
    17. cv2.waitKey(0)
    18. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 创建纯黑的一张照片作为背景图来画图 画直线
    4. img=np.zeros((480,640,3),np.uint8)
    5. # line(img,pt2,pt2,color,thickness,lineType,shift)
    6. cv2.line(img,(10,20),(300,400),(0,0,255),5,4)
    7. cv2.imshow('draw',img)
    8. cv2.waitKey(0)
    9. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 图片的加法运算
    4. # 读取2张图片
    5. img1=cv2.imread('./kon.jpg')
    6. img2=cv2.imread('./kon2.jpg')
    7. print(img1.shape)
    8. print(img2.shape)
    9. # 在做加法前需要把2张图片的形状变得完全一致比如维度之类的
    10. # 可以通过ndarray的切片方式取出完全一样的形状
    11. # 第一张图片更大,所以从第一张图片里切除第2张图片
    12. new_img1=img1[0:460,:736]
    13. # cv2.add 加法操作要求2个图片的长宽相同,通道数相同
    14. # add的规则就是2个图对应位置的元素相加,如果超过255,全部变成255
    15. new_img=cv2.add(new_img1,img2)
    16. cv2.imshow('new_img',new_img)
    17. cv2.waitKey(0)
    18. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 图片的融合
    4. # 不是简单的加法。相当于拿图片做了线性运算。new_img=img1*w1+img2*w2+bias
    5. img1=cv2.imread('./kon.jpg')
    6. img2=cv2.imread('./kon2.jpg')
    7. print(img1.shape)
    8. print(img2.shape)
    9. new_img1=img1[0:460,:736]
    10. # cv2.add 加法操作要求2个图片的长宽相同,通道数相同
    11. # add的规则就是2个图对应位置的元素相加,如果超过255,全部变成255
    12. new_img=cv2.addWeighted(new_img1,0.3,img2,0.7,0)
    13. cv2.imshow('new_img',new_img)
    14. cv2.waitKey(0)
    15. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 卷积操作
    4. # 不同的卷积核 会让卷积后的图片呈现不一样的效果
    5. img1=cv2.imread('./kon.jpg')
    6. img2=cv2.imread('./kon2.jpg')
    7. # kernel必须是float型
    8. # 该kernel是起虚化的作用
    9. kernel=np.ones((5,5),np.float32)/25
    10. # 尝试其他卷积核,突出轮廓
    11. kernel=np.array([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])
    12. # 卷积操作 -1表示和之前图片的类型相同
    13. dst=cv2.filter2D(img2,-1,kernel)
    14. cv2.imshow('img',np.hstack((img2,dst)))
    15. cv2.waitKey(0)
    16. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 方盒滤波(与创建kernel的实现效果是一样的)
    4. img1=cv2.imread('./kon.jpg')
    5. img2=cv2.imread('./kon2.jpg')
    6. # 不用手动创建卷积核,只需要告诉方盒滤波,卷积核的大小是多少
    7. dst=cv2.boxFilter(img2,-1,(5,5),normalize=True)
    8. cv2.imshow('img',np.hstack((img2,dst)))
    9. cv2.waitKey(0)
    10. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 均值滤波(模糊图片)
    4. img1=cv2.imread('./kon.jpg')
    5. img2=cv2.imread('./kon2.jpg')
    6. # 均值滤波没有位深这个参数 把-1删掉
    7. dst=cv2.blur(img2,(5,5))
    8. cv2.imshow('img',np.hstack((img2,dst)))
    9. cv2.waitKey(0)
    10. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 高斯滤波 卷积核里的数都符合高斯分布(常用的是用来去噪)
    4. img1=cv2.imread('./kon.jpg')
    5. img2=cv2.imread('./kon2.jpg')
    6. dst=cv2.GaussianBlur(img2,(5,5),sigmaX=100)
    7. cv2.imshow('img',np.hstack((img2,dst)))
    8. cv2.waitKey(0)
    9. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 中值滤波 对椒盐类的去噪效果好 高斯滤波对这个效果不太好
    4. img1=cv2.imread('./img3.png')
    5. # 中值滤波
    6. dst=cv2.medianBlur(img1,5)
    7. cv2.imshow('img',np.hstack((img1,dst)))
    8. cv2.waitKey(0)
    9. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # sobel算子 边缘检测(边缘部分像素值跃迁)
    4. img1=cv2.imread('./img1.png')
    5. # 注意sobel算子要分别计算下xy的梯度
    6. # 计算x轴方向的梯度
    7. dx=cv2.Sobel(img1,-1,dx=1,dy=0,ksize=3)
    8. # 计算y轴方向的梯度
    9. dy=cv2.Sobel(img1,-1,dx=0,dy=1,ksize=3)
    10. # 使用sobel算子 别忘了把xy的梯度合并在一起
    11. dst=cv2.add(dx,dy)
    12. # 要展示2张图片的时候需要2个窗口 窗口要取不同的名字
    13. cv2.imshow('img',img1)
    14. cv2.imshow('dx',dst)
    15. cv2.waitKey(0)
    16. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # canny和边缘检测
    4. img1=cv2.imread('./kon2.jpg')
    5. # 后面2个参数是阈值 大于最大阈值的肯定是边缘 小于最小阈值的肯定不是边缘 处于中间的与边缘相连的也是边缘
    6. #dst=cv2.Canny(img1,100,200)
    7. # 阈值给的稍大绘制的边缘不够精细
    8. # 可以通过给小一点阈值 得到较为精细的边缘
    9. dst=cv2.Canny(img1,64,128)
    10. cv2.imshow('img',dst)
    11. cv2.waitKey(0)
    12. cv2.destoryAllWindows()
    1. import cv2
    2. import numpy as np
    3. # 全局二值化
    4. img1=cv2.imread('./kon2.jpg')
    5. # 把图片转换成灰度图再进行二值化 二值化像素只有2个值
    6. gray=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
    7. # 注意thrshold会返回2个值,一个是阈值,一个是二值化处理的图片
    8. thresh,dst=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
    9. cv2.imshow('img',dst)
    10. cv2.waitKey(0)
    11. cv2.destoryAllWindows()

  • 相关阅读:
    洛谷题解 | AT_arc069_b [ABC055D] Menagerie
    LeetCode - #55 跳跃游戏
    python电影院购票系统毕业设计源码221133
    devops自动化运维平台的核心原则有哪些?
    13-Spring架构源码分析-IoC 之开启 Bean 的加载
    Web 自动化神器 TestCafe—页面高级操作篇
    Xilinx ZYNQ 7000学习笔记三(小结)
    Polygon zkEVM的pil-stark Fibonacci状态机代码解析
    Linux 环境Skywalking部署Elasticsearch
    STM32F303RE 四个ADC同步规则采样
  • 原文地址:https://blog.csdn.net/the_littlew/article/details/125463223