def webcam_feed(): cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() image = cv2.resize(frame, (640, 480)) _, buffer = cv2.imencode('.jpg', image) frame = buffer.tobytes() yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') cap.release() def webcam_view(request): return StreamingHttpResponse(webcam_feed(), content_type="multipart/x-mixed-replace;boundary=frame") 转化为灰度图片并在网页显示,分成两个文件的代码
时间: 2023-06-10 16:03:14 浏览: 246
lv_vfw.zip_Capture_LabVIEW webcam_labview image_webcam_webcam la
这里是将代码分成两个文件的方式:
File 1:webcam_feed.py
```
import cv2
def webcam_feed():
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
image = cv2.resize(frame, (640, 480))
_, buffer = cv2.imencode('.jpg', image)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n'
frame
b'\r\n')
cap.release()
```
File 2:webcam_view.py
```
from django.http import StreamingHttpResponse
from webcam_feed import webcam_feed
def webcam_view(request):
import cv2
import numpy as np
def gen_frames():
for frame in webcam_feed():
# Convert JPEG buffer to numpy array
img_np = np.frombuffer(frame, dtype=np.uint8)
# Convert numpy array to grayscale
img_gray = cv2.imdecode(img_np, cv2.IMREAD_GRAYSCALE)
# Convert grayscale image back to JPEG buffer
_, buffer = cv2.imencode('.jpg', img_gray)
frame = buffer.tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n'
frame
b'\r\n')
return StreamingHttpResponse(gen_frames(), content_type='multipart/x-mixed-replace; boundary=frame')
```
注意,在 File 2 中的 `gen_frames` 函数中,我们做了以下几件事情:
- 把 `webcam_feed` 函数的返回值转化为一个个 JPEG 图片的 buffer。
- 对每个 buffer,先把它转换成 numpy 数组,再把这个 numpy 数组转换成灰度图(使用 Opencv 的 `cv2.imdecode` 和 `cv2.IMREAD_GRAYSCALE`)。
- 把灰度图再转换回 JPEG buffer,最终作为响应的一帧返回。
阅读全文