(翻译)在Y分钟学X:OpenCV (OpenCV入门)(中文注释)

news/2024/11/25 18:42:11/

 内容来自于Learn X in Y Minutes: Scenic Programming Language Tours

一些opencv的基础使用方法,图形绘制,边缘检测,人像识别等。

对文档中的英文进行了一些翻译,添加了中文注释,方便学习

Opencv

OpenCV(开源计算机视觉)是一个主要针对实时计算机视觉的编程函数库。它最初由英特尔开发,后来由Willow Garage和Itseez(后来被英特尔收购)支持。Opencv目前支持多种语言,如C++,Python,Java等

安装

有关在计算机上安装 OpenCV 的信息,请参阅这些文章。

  • Windows 安装说明:https://opencv-python-tutroals.readthedocs.io/en/latest/py教程/pysetup/pysetupinwindows/pysetupinwindows.html#install-opencv-python-in-windows
  • Mac 安装说明((High Sierra):https://medium.com/@nuwanprabhath/installing-opencv-in-macos-high-sierra-for-python-3-89c79f0a246a
  • Linux 安装说明 (Ubuntu 18.04): Ubuntu 18.04: How to install OpenCV - PyImageSearch

在这里,我们将重点介绍OpenCV的python实现。

# opencv读取图片
import cv2
img = cv2.imread('cat.jpg')# 显示图片
# imshow() 函数用来显示图片
cv2.imshow('Image',img)
#你的第一个参数是窗口的标题,第二个参数是image#如果你得到了错误,对象类型None,你的图像路径可能是错误的。请重新检查图像路径
cv2.waitKey(0)
# waitKey()是一个键盘绑定函数,以毫秒为单位。对于GUI事件,必须使用waitKey()函数。
# waitKey()–是在一个给定的时间内(单位ms)等待用户按键触发; 
# 如果用户没有按下键,则继续等待 (循环)
# 常见 : 设置 waitKey(0) , 则表示程序会无限制的等待用户的按键事件
# 一般在 imgshow 的时候 , 如果设置 waitKey(0) , 代表按任意键继续
# 2. 显示视频时,延迟时间需要设置为 大于0的参数
# delay > 0时 , 延迟 ”delay”ms , 在显示视频时这个函数是有用的 , 
# 用于设置在显示完一帧图像后程序等待 ”delay”ms 再显示下一帧视频 ; 
# 如果使用 waitKey(0) 则只会显示第一帧视频# 用于将图像保存到指定的文件。
cv2.imwrite('catgray.png',img)
# 第一个变量是文件名,第二个是图片#将图像转换为灰度
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#从网络摄像头捕获视频
cap = cv2.VideoCapture(0)
#0是您的相机,如果您有多个相机,您需要输入它们的ID
while(True):# 逐帧捕获_, frame = cap.read()cv2.imshow('Frame',frame)#当用户按q ->退出时if cv2.waitKey(1) & 0xFF == ord('q'):break
#摄像机必须被释放
cap.release()#从文件播放视频
cap = cv2.VideoCapture('movie.mp4')
while(cap.isOpened()):_, frame = cap.read()#以灰度播放视频gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('frame',gray)if cv2.waitKey(1) & 0xFF == ord('q'):break
cap.release()#在OpenCV中绘制线条
# cv2.line(img,(x,y),(x1,y1),(color->r,g,b->0 到 255),厚度)
cv2.line(img,(0,0),(511,511),(255,0,0),5)#绘制矩形
#cv2.矩形(img,(x,y),(x1,y1),(颜色->r,g,b->0到255),厚度)
#厚度=-1,用于填充矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)# 绘制圆形
# cv2.circle(img,(圆心x,圆心y), 半径, (color->r,g,b->0 to 255), 厚度)
cv2.circle(img,(200,90), 100, (0,0,255), -1)#绘制椭圆
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)# 添加文字
cv2.putText(img,"Hello World!!!", (10,50), cv2.FONT_HERSHEY_SIMPLEX, 2, 255)# 图像混合
img1 = cv2.imread('cat.png')
img2 = cv2.imread('openCV.jpg')
dst = cv2.addWeighted(img1,0.5,img2,0.5,0)#阈值图像
#二值阈值
_,thresImg = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
#自适应阈值
adapThres = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY,11,2)#模糊图像
#高斯模糊
blur = cv2.GaussianBlur(img,(5,5),0)
#中值模糊
medianBlur = cv2.medianBlur(img,5)#Canny边缘检测
img = cv2.imread('cat.jpg',0)
edges = cv2.Canny(img,100,200)#基于Haar级联的人脸检测
# Download Haar Cascades from https://github.com/opencv/opencv/blob/master/data/haarcascades/
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')img = cv2.imread('human.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)roi_gray = gray[y:y+h, x:x+w]roi_color = img[y:y+h, x:x+w]eyes = eye_cascade.detectMultiScale(roi_gray)for (ex,ey,ew,eh) in eyes:cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)cv2.imshow('img',img)
cv2.waitKey(0)cv2.destroyAllWindows()
#destroyAllWindows()销毁所有窗口。#如果要销毁特定窗口,请传递创建的窗口的确切名称。

仅供学习,不为商业用途,如有侵权,联系删


http://www.ppmy.cn/news/275148.html

相关文章

511遇见易语言大漠模块制作截图截图Capture

本节课封装的命令有:Capture,CaptureGif,CaptureJpg,CapturePng,CapturePre,CmpColor,EnableDisplayDebug,EnableGetColorByCapture并对截图命令做了测试,当绑定窗口时&a…

LOJ#511. 「LibreOJ NOI Round #1」验题

对于一棵树和一个给出的独立集S,设S的字典序排名为x,求这棵树字典序第xk大的独立集 因为要求字典序第xk大,x可能非常大,所以我们要逐位枚举确定这个独立集 我们先枚举确定答案独立集和S的LCP,然后从LCP开始再按编号往…

NYOJ 511 移动小球

题目连接:移动小球 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner inputnew Scanner(System.in);int Ninput.nextInt();while(N-->0){int ninput.nextInt();int minput.nextInt();F f[]new F[n1];for(int i1;i…

511遇见易语言教程API模块制作cmd复制文件

使用cmd命令封装易语言复制文件。 视频链接: 511遇见易语言模块API教程 1、 使用cmd命令复制文件 COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B] [ source [/A | /B] [ ...]] [destination [/A | /B]] source 指定要复制的文件。 /A 表示一…

511遇见易语言大漠模块制作教程找图FindPic

本课视频教程封装的命令有:FindPic、FindPicE、FindPicEx、FindPicExS、 FindPicMem、 FindPicMemE、FindPicMemEx、FindPicS、FindShape、FindShapeE、FindShapeEx、FreePic;并对找图命令采用《剑侠情缘》做了实例测试。 教程视频链接 511遇见大漠模块制…

双向链表nyoj511

这道题做了一天了,开始用单向链表做,但是发现用了空表头就在中间处理的时候出现了问题,如果是没形成循环,就没办法记录两个指针;并且多次访问会超时,所以下午用了双向指针加结构体数组来做,ball…

利用opencv3.0点击图片显示对应坐标(x,y)

(VS2013Opencv3.0) h文件&#xff1a; #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv;void on_mouseDisplayC(int event, int x, int y, int flags, void* ustc); int DisplayCoordinates(IplImage* src1);CPP文件…

python 柱状图标出y值_Python——pyecharts数据可视化

关于项目 pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒,为了与 Python 进行对接,方便在 Python 中直接使用数据生成图,这个项目诞生了。 预热准备 进入命令行,安装pyecharts第三方库 …