人工智能学习记录 Day1

今天主要学习了基于 OpenCV 库的图像处理基础操作,具体包括以下几个方面:

图像创建:
  • 创建黑色图像(使用 np.zeros())

    black = np.zeros((640,480,3),dtype=np.uint8)
    cv.imshow("black",black)
    

  • 创建白色图像(使用 np.full())

    white = np.full((640,480,3),255,dtype=np.uint8)
    cv.imshow("white",white)
    

  • 生成随机像素值的图像(使用 np.random.randint())

    random = np.random.randint(0,255,(640,480,3),dtype=np.uint8)
    cv.imshow("random",random)

  • 修改图像像素值的方法

    black[:,:,:] = 255
    cv.imshow("white2",black)

图像绘制:
  • 在图像上绘制直线(cv.line())

    cv.line(cat,(123,674),(280,470),(0,0,255),5)

  • 绘制矩形(cv.rectangle())

    cv.rectangle(cat,(240,374),(380,470),(123,155,0),-1)

  • 绘制圆形(cv.circle()),包括抗锯齿技术的应用

    cv.circle(cat,(320,420),50,(0,255,0),-1,cv.LINE_AA)
    

图像基础操作:
  • 创建不同类型的显示窗口(cv.namedWindow())

    cv.namedWindow("win1",cv.WINDOW_AUTOSIZE)
    cv.namedWindow("win2",cv.WINDOW_NORMAL)
    

  • 读取彩色和灰度图像(cv.imread())

    img=cv.imread("../images/1.jpg")
    gray=cv.imread("../images/1.jpg",cv.IMREAD_GRAYSCALE)
    

  • 保存图像(cv.imwrite())

    cv.imwrite("./gray.jpg",gray)

  • 显示图像及窗口控制(cv.imshow(), cv.waitKey(), cv.destroyAllWindows())

    #显示图像
    cv.imshow("win1",img)
    cv.imshow("win2",gray)
    
    #留下绘制时间 等待n毫秒 0表示一直等待
    cv.waitKey(0)
    
    #销毁窗口释放资源
    cv.destroyAllWindows()

图像剪裁与修改:
  • 对图像进行区域剪裁(ROI 提取)

    roi = cat[240:374,380:477]

  • 通过修改剪裁区域影响原图像素

    roi[:,:] = (0,0,255)

视频处理:
  • 读取视频文件和摄像头实时视频流(cv.VideoCapture())

    cap = cv.VideoCapture("../images/videocap.mp4")

  • 循环读取视频帧并显示

    while True:
        ret,frame=cap2.read()
    

  • 视频播放控制与退出机制

        #判断是否读取成功
        if not ret:
            print("无法读取视频")
            break
        cv.imshow("video",frame)
        if cv.waitKey(1) & 0xFF == ord("q"):
            print("按键退出")
            break
    cap.release()
    cv.destroyAllWindows()

图像大小调整:
  • 使用 cv.resize() 调整图像尺寸

    dst= cv.resize(cat,(640,480))

学习心得

原以为图像处理门槛很高,实际用 OpenCV 发现基础操作比预想直观。几个关键发现:

  1. ROI 的指针特性
    用 img[y1:y2, x1:x2] 切片提取区域时,修改子图会直接改变原图数据。这种类似指针的操作效率很高,编码时要注意避免误改原图。

  2. 视频流的本质验证
    cv.VideoCapture() + 循环 read() 的流程,把 “视频=连续帧” 的理论具象化了。手动控制帧读取时,对视频播放的理解反而比直接调用播放器更清晰。

  3. 即时反馈驱动学习
    最有效的学习动力来自实时可视化:

    • 画个矩形 → 运行 → 立即看到效果

    • 调整参数 → 重新运行 → 对比变化
      这种闭环极大降低调试成本,比纯看文档效率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值