python opencv中没有CV_CAP_PROP_FRAME_HEIGHT
时间: 2023-09-04 12:10:49 浏览: 49
在最新版本的 OpenCV 中,`CV_CAP_PROP_FRAME_HEIGHT`已经被替换成了`CAP_PROP_FRAME_HEIGHT`。建议使用最新版本的 OpenCV,并使用`CAP_PROP_FRAME_HEIGHT`来获取视频帧的高度。以下是示例代码:
```python
import cv2
cap = cv2.VideoCapture('video.mp4')
# 获取视频帧的宽度和高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print('视频帧的宽度:', frame_width)
print('视频帧的高度:', frame_height)
```
相关问题
python opencv双目测距_OpenCV实现双目测距
双目测距是计算机视觉中一种常见的测距方法,通过两个摄像头或双目摄像头拍摄同一场景的两个不同视角的图像,计算两个视角之间的视差,从而得到场景中物体的距离。
在 Python 中,我们可以使用 OpenCV 库来实现双目测距。以下是一个简单的 OpenCV 双目测距代码示例:
```python
import cv2
import numpy as np
# 设置摄像头参数
cap_left = cv2.VideoCapture(1)
cap_left.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_left.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cap_right = cv2.VideoCapture(2)
cap_right.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap_right.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
# 设置相机标定参数
K1 = np.array([[ 701.9780, 0, 324.4757],
[ 0, 701.9780, 239.6201],
[ 0, 0, 1.0000]])
K2 = np.array([[ 701.9780, 0, 303.5129],
[ 0, 701.9780, 239.6201],
[ 0, 0, 1.0000]])
D1 = np.array([[-0.0353, 0.0716, -0.0008, -0.0007, -0.0203]])
D2 = np.array([[-0.0375, 0.0716, -0.0019, -0.0009, -0.0213]])
R = np.array([[ 0.9993, -0.0056, -0.0373],
[ 0.0058, 1.0000, 0.0044],
[ 0.0373, -0.0046, 0.9993]])
T = np.array([[-76.7514],
[ 0.5991],
[ 0.0321]])
# 创建立体校正映射表
size = (640, 480)
R1, R2, P1, P2, Q, _, _ = cv2.stereoRectify(K1, D1, K2, D2, size, R, T)
map1x, map1y = cv2.initUndistortRectifyMap(K1, D1, R1, P1, size, cv2.CV_32FC1)
map2x, map2y = cv2.initUndistortRectifyMap(K2, D2, R2, P2, size, cv2.CV_32FC1)
while True:
# 读取图像
ret1, img_left = cap_left.read()
ret2, img_right = cap_right.read()
if not ret1 or not ret2:
break
# 校正图像
img_left_remap = cv2.remap(img_left, map1x, map1y, cv2.INTER_LINEAR)
img_right_remap = cv2.remap(img_right, map2x, map2y, cv2.INTER_LINEAR)
# 计算视差图
stereo = cv2.StereoSGBM_create(minDisparity=0,
numDisparities=16,
blockSize=5,
P1=8*3*5**2,
P2=32*3*5**2,
disp12MaxDiff=1,
uniquenessRatio=10,
speckleWindowSize=100,
speckleRange=32)
gray_left = cv2.cvtColor(img_left_remap, cv2.COLOR_BGR2GRAY)
gray_right = cv2.cvtColor(img_right_remap, cv2.COLOR_BGR2GRAY)
disp = stereo.compute(gray_left, gray_right).astype(np.float32) / 16.0
# 转换为深度图
f = 701.9780 # 焦距
b = 76.7514 # 双目基线
depth = f * b / disp
# 显示深度图
depth_norm = cv2.normalize(depth, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8UC1)
cv2.imshow("depth", depth_norm)
# 等待按键
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap_left.release()
cap_right.release()
cv2.destroyAllWindows()
```
在这个代码示例中,我们首先使用 `cv2.VideoCapture` 函数设置两个相机的参数,并读取左右两个相机的图像。然后,我们设置相机标定参数,通过 `cv2.stereoRectify` 函数生成立体校正映射表,使用 `cv2.remap` 函数对左右两个相机的图像进行校正。接着,我们使用 `cv2.StereoSGBM_create` 函数计算视差图,并将视差图转换为深度图。最后,我们使用 `cv2.imshow` 函数显示深度图,等待用户按下 'q' 键退出程序。
需要注意的是,本示例代码中的相机标定参数和立体校正参数都需要根据实际情况进行调整。同时,我们使用了 SGBM 算法进行视差计算,也可以使用其他算法,如 BM 算法或 Belief Propagation 算法。
python视频处理代码_Python+Opencv图像和视频加密的代码实现
以下是一个简单的使用Python和OpenCV实现图像和视频加密的示例代码:
```python
import cv2
import numpy as np
def encrypt(img_path, key):
# 读取图像
img = cv2.imread(img_path)
# 将图像转换为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 获取图像的宽度和高度
height, width = gray.shape
# 生成随机数种子
np.random.seed(key)
# 生成与图像大小相同的随机数矩阵
rand_matrix = np.random.randint(0, 256, (height, width))
# 对图像进行异或运算
encrypted_img = cv2.bitwise_xor(gray, rand_matrix)
# 返回加密后的图像
return encrypted_img
def decrypt(encrypted_img, key):
# 获取图像的宽度和高度
height, width = encrypted_img.shape
# 生成随机数种子
np.random.seed(key)
# 生成与图像大小相同的随机数矩阵
rand_matrix = np.random.randint(0, 256, (height, width))
# 对加密图像进行异或运算
decrypted_img = cv2.bitwise_xor(encrypted_img, rand_matrix)
# 返回解密后的图像
return decrypted_img
def encrypt_video(video_path, key):
# 读取视频
cap = cv2.VideoCapture(video_path)
# 获取视频的帧率、宽度和高度
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象,用于写入加密后的视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
encrypted_video = cv2.VideoWriter('encrypted_video.mp4', fourcc, fps, (width, height), isColor=False)
# 读取视频帧并加密
while True:
ret, frame = cap.read()
if not ret:
break
# 将图像转换为灰度图
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 加密图像
encrypted_frame = encrypt(gray, key)
# 将加密后的帧写入加密视频
encrypted_video.write(encrypted_frame)
# 释放资源
cap.release()
encrypted_video.release()
def decrypt_video(encrypted_video_path, key):
# 读取加密视频
cap = cv2.VideoCapture(encrypted_video_path)
# 获取加密视频的帧率、宽度和高度
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象,用于写入解密后的视频
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
decrypted_video = cv2.VideoWriter('decrypted_video.mp4', fourcc, fps, (width, height), isColor=False)
# 读取加密视频帧并解密
while True:
ret, frame = cap.read()
if not ret:
break
# 解密帧
decrypted_frame = decrypt(frame, key)
# 将解密后的帧写入解密视频
decrypted_video.write(decrypted_frame)
# 释放资源
cap.release()
decrypted_video.release()
# 测试加密解密图像
encrypted_img = encrypt('test_img.jpg', 123)
cv2.imwrite('encrypted_img.jpg', encrypted_img)
decrypted_img = decrypt(encrypted_img, 123)
cv2.imwrite('decrypted_img.jpg', decrypted_img)
# 测试加密解密视频
encrypt_video('test_video.mp4', 123)
decrypt_video('encrypted_video.mp4', 123)
```
该代码中的 `encrypt` 函数和 `decrypt` 函数分别实现了图像的加密和解密操作,使用的加密算法是将图像的每个像素值与一个随机数进行异或运算,随机数矩阵的生成使用了Numpy库中的随机数函数。
`encrypt_video` 函数和 `decrypt_video` 函数分别实现了视频的加密和解密操作,使用的方法是对视频中的每一帧进行加密或解密操作,然后将加密或解密后的帧写入加密或解密视频中。
请注意:该示例代码仅为了演示加密和解密的基本原理,实际应用中需要使用更加复杂的加密算法和密钥管理方法,以确保加密的安全性。