Skip to content

Commit 1e4ad7a

Browse files
committed
OpenCV-Python教程、源码迁移 2018年10月2日
0 parents  commit 1e4ad7a

File tree

106 files changed

+1890
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+1890
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
wiki/
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// More: http://ex2tron.top
2+
3+
#include "stdafx.h"
4+
#include <opencv2\opencv.hpp>
5+
6+
using namespace cv;
7+
using namespace std;
8+
9+
int main()
10+
{
11+
// 开始计时
12+
int start = getTickCount();
13+
14+
// 读入一张图片并调整对比度和亮度
15+
Mat gSrcImage = imread("lena.jpg");
16+
Mat gDstImage = Mat::zeros(gSrcImage.size(), gSrcImage.type());
17+
18+
//1.访问每一个像素的方式
19+
for (int y = 0; y < gSrcImage.rows; y++)
20+
{
21+
for (int x = 0; x < gSrcImage.cols; x++)
22+
{
23+
for (int c = 0; c < 3; c++)
24+
{
25+
gDstImage.at<Vec3b>(y, x)[c] = saturate_cast<uchar>(0.8 * gSrcImage.at<Vec3b>(y, x)[c] + 80);
26+
}
27+
}
28+
}
29+
30+
//2.最快速的方式
31+
//gSrcImage.convertTo(gDstImage, -1, 0.8, 80);
32+
33+
// 停止计时
34+
int end = getTickCount();
35+
36+
// 单位:s
37+
double time = (end - start) / getTickFrequency();
38+
printf("%f", time);
39+
40+
getchar();
41+
return 0;
42+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
import numpy as np
5+
6+
# 开始计时
7+
start = cv2.getTickCount()
8+
9+
# 读入一张图片并调整对比度和亮度
10+
img = cv2.imread('lena.jpg')
11+
res = np.uint8(np.clip((0.8 * img + 80), 0, 255))
12+
13+
# 停止计时
14+
end = cv2.getTickCount()
15+
16+
# 单位:s
17+
print((end - start) / cv2.getTickFrequency())
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// More: http://ex2tron.top
2+
3+
#include "stdafx.h"
4+
#include <opencv2\opencv.hpp>
5+
6+
using namespace cv;
7+
using namespace std;
8+
9+
int main()
10+
{
11+
// 开始计时
12+
int start = getTickCount();
13+
14+
// 读入一张图片
15+
Mat gSrcImage = imread("lena.jpg");
16+
17+
// 停止计时
18+
int end = getTickCount();
19+
20+
// 单位:s
21+
double time = (end - start) / getTickFrequency();
22+
printf("%f", time);
23+
24+
getchar();
25+
return 0;
26+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
# 开始计时
6+
start = cv2.getTickCount()
7+
8+
# 读入一张图片
9+
img = cv2.imread('lena.jpg')
10+
11+
# 停止计时
12+
end = cv2.getTickCount()
13+
14+
# 单位:s
15+
print((end - start) / cv2.getTickFrequency())

01. 简介与安装/lena.jpg

30.8 KB
Loading
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
img = cv2.imread('lena.jpg')
6+
cv2.imshow('lena', img)
7+
8+
k = cv2.waitKey(0)
9+
# ord用来获取某个字符的编码
10+
if k == ord('s'):
11+
cv2.imwrite('lena_save.bmp', img)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
# 1.灰度图加载一张彩色图
6+
img = cv2.imread('lena.jpg', 0)
7+
8+
9+
# 2.显示图片
10+
cv2.imshow('lena', img)
11+
cv2.waitKey(0)
12+
13+
# 先定义窗口,后显示图片
14+
cv2.namedWindow('lena2', cv2.WINDOW_NORMAL)
15+
cv2.imshow('lena2', img)
16+
cv2.waitKey(0)
17+
18+
19+
# 3.保存图片
20+
cv2.imwrite('lena_gray.jpg', img)

02. 基本元素-图片/lena.jpg

49.8 KB
Loading
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
# 1.打开摄像头
6+
capture = cv2.VideoCapture(2)
7+
8+
# 2.获取捕获的分辨率
9+
width, height = capture.get(3), capture.get(4)
10+
print(width, height)
11+
# 以原分辨率的一倍来捕获,
12+
# 参数1可以直接写数字,或者OpenCV符号表示
13+
capture.set(cv2.CAP_PROP_FRAME_WIDTH, width * 2)
14+
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height * 2)
15+
16+
while(True):
17+
# 获取一帧
18+
ret, frame = capture.read()
19+
# 将这帧转换为灰度图
20+
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
21+
22+
cv2.imshow('frame', gray)
23+
if cv2.waitKey(1) == ord('q'):
24+
break

03. 打开摄像头/cv2_exercise1.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
6+
def track_back(x):
7+
'''
8+
### 回调函数,x表示滑块的位置
9+
'''
10+
# 更改视频的帧位置
11+
capture.set(cv2.CAP_PROP_POS_FRAMES, x)
12+
13+
14+
cv2.namedWindow('window')
15+
16+
capture = cv2.VideoCapture('demo_video.mp4')
17+
# 获取视频总共多少帧
18+
frames = capture.get(cv2.CAP_PROP_FRAME_COUNT)
19+
# 创建滑动条
20+
cv2.createTrackbar('process', 'window', 1, int(frames), track_back)
21+
22+
while(capture.isOpened()):
23+
ret, frame = capture.read()
24+
25+
cv2.imshow('window', frame)
26+
if cv2.waitKey(30) == ord('q'):
27+
break
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
# 播放本地视频
6+
capture = cv2.VideoCapture('demo_video.mp4')
7+
8+
while(capture.isOpened()):
9+
ret, frame = capture.read()
10+
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
11+
12+
cv2.imshow('frame', gray)
13+
if cv2.waitKey(30) == ord('q'):
14+
break
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
capture = cv2.VideoCapture(0)
6+
7+
# 定义编码方式并创建VideoWriter对象
8+
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
9+
outfile = cv2.VideoWriter('output.avi', fourcc, 25., (640, 480))
10+
11+
while(capture.isOpened()):
12+
ret, frame = capture.read()
13+
14+
if ret:
15+
# 写入文件
16+
outfile.write(frame)
17+
18+
cv2.imshow('frame', frame)
19+
if cv2.waitKey(1) == ord('q'):
20+
break
21+
else:
22+
break

03. 打开摄像头/demo_video.mp4

6.28 MB
Binary file not shown.
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
img = cv2.imread('lena.jpg')
6+
7+
# 1.获取像素的值
8+
px = img[100, 100]
9+
print(px) # [119 108 201]
10+
11+
# 只获取蓝色blue通道的值
12+
px_blue = img[100, 100, 0]
13+
print(px_blue) # 119
14+
15+
16+
# 2.修改像素的值
17+
img[100, 100] = [255, 255, 255]
18+
print(img[100, 100]) # [255 255 255]
19+
20+
21+
# 3.图片形状
22+
print(img.shape) # (263, 263, 3)
23+
# 形状中包括高度、宽度和通道数
24+
height, width, channels = img.shape
25+
# img是灰度图的话:height, width = img.shape
26+
27+
# 总像素数
28+
print(img.size) # 263*263*3=207507
29+
# 数据类型
30+
print(img.dtype) # uint8
31+
32+
33+
# 4.ROI截取
34+
face = img[100:200, 115:188]
35+
cv2.imshow('face', face)
36+
cv2.waitKey(0)
37+
38+
39+
# 5.通道分割与合并
40+
b, g, r = cv2.split(img)
41+
img = cv2.merge((b, g, r))
42+
# 更推荐的获取某一通道方式
43+
b = img[:, :, 0]
44+
cv2.imshow('b', b)
45+
cv2.waitKey(0)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
5+
img = cv2.imread('lena.jpg')
6+
7+
# 帽子ROI的红色通道
8+
hat_r = img[25:120, 50:220, 2]
9+
cv2.imshow('hat', hat_r)
10+
cv2.waitKey(0)

04. 图像基本操作/lena.jpg

30.8 KB
Loading
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
import numpy as np
5+
6+
img = cv2.imread('lena.jpg')
7+
8+
# 1.转成灰度图
9+
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
10+
11+
cv2.imshow('img', img)
12+
cv2.imshow('gray', img_gray)
13+
cv2.waitKey(0)
14+
15+
16+
# 2.获取所有的转换模式
17+
flags = [i for i in dir(cv2) if i.startswith('COLOR_')]
18+
print(flags)
19+
20+
# 蓝色的HSV值
21+
blue = np.uint8([[[255, 0, 0]]])
22+
hsv_blue = cv2.cvtColor(blue, cv2.COLOR_BGR2HSV)
23+
print(hsv_blue) # [[[120 255 255]]]
24+
25+
26+
# 3.追踪蓝色物体
27+
capture = cv2.VideoCapture(0)
28+
29+
# 蓝色的范围,不同光照条件下不一样,可灵活调整
30+
lower_blue = np.array([100, 110, 110])
31+
upper_blue = np.array([130, 255, 255])
32+
33+
while(True):
34+
# 1.捕获视频中的一帧
35+
ret, frame = capture.read()
36+
37+
# 2.从BGR转换到HSV
38+
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
39+
40+
# 3.inRange():介于lower/upper之间的为白色,其余黑色
41+
mask = cv2.inRange(hsv, lower_blue, upper_blue)
42+
43+
# 4.只保留原图中的蓝色部分
44+
res = cv2.bitwise_and(frame, frame, mask=mask)
45+
46+
cv2.imshow('frame', frame)
47+
cv2.imshow('mask', mask)
48+
cv2.imshow('res', res)
49+
50+
if cv2.waitKey(1) == ord('q'):
51+
break
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# More: http://ex2tron.top
2+
3+
import cv2
4+
import numpy as np
5+
6+
# HSV中
7+
# Blue:[[[120 255 255]]]
8+
# Green:[[[ 60 255 255]]]
9+
# Red:[[[ 0 255 255]]]
10+
11+
capture = cv2.VideoCapture(1)
12+
13+
# 蓝色的范围
14+
lower_blue = np.array([100, 110, 110])
15+
upper_blue = np.array([130, 255, 255])
16+
17+
# 绿色的范围
18+
lower_green = np.array([40, 90, 90])
19+
upper_green = np.array([70, 255, 255])
20+
21+
# 红色的范围
22+
lower_red = np.array([160, 120, 120])
23+
upper_red = np.array([179, 255, 255])
24+
25+
while(True):
26+
# 1.捕获视频中的一帧
27+
ret, frame = capture.read()
28+
29+
# 2.从BGR转换到HSV
30+
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
31+
32+
mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)
33+
mask_green = cv2.inRange(hsv, lower_green, upper_green)
34+
mask_red = cv2.inRange(hsv, lower_red, upper_red)
35+
36+
# 3.将所有的mask相加,就可以同时显示了
37+
mask = mask_blue + mask_green + mask_red
38+
39+
# 4.保留原图中的三种颜色部分
40+
res = cv2.bitwise_and(frame, frame, mask=mask)
41+
42+
cv2.imshow('frame', frame)
43+
cv2.imshow('mask', mask)
44+
cv2.imshow('res', res)
45+
46+
if cv2.waitKey(1) == ord('q'):
47+
break

05. 颜色空间转换/lena.jpg

30.8 KB
Loading

0 commit comments

Comments
 (0)