gpt4 book ai didi

python - 我的摄像头实时直方图

转载 作者:行者123 更新时间:2023-12-02 16:55:36 26 4
gpt4 key购买 nike

我试图从我的网络摄像头的灰度实时显示直方图,问题是直方图没有被更新并且我的凸轮停止,直到我关闭直方图的窗口。我怎样才能解决这个问题?我想同时显示来自我的网络摄像头的灰度图像及其直方图,可以这样做吗?

import numpy as np
import cv2
from matplotlib import pyplot as plt

cap = cv2.VideoCapture(0)

while(True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('Janela', frame)
cv2.imshow('Outra', gray)
plt.hist(gray.ravel(), 256, [0, 256])
plt.show()

if (cv2.waitKey(1) & 0xFF == 27):
break

cap.release()
cv2.destroyAllWindows()

最佳答案

我已经在同一任务中工作了一段时间。一段时间后,我有了一段运行良好的代码。它在一个窗口中显示相机图像,在其他窗口中显示直方图。因为我对寻找颜色感兴趣,所以我正在使用每一帧的“色调” channel 。

# import the necessary packages
import cv2
import numpy as np

#Create window to display image
cv2.namedWindow('colorhist', cv2.WINDOW_AUTOSIZE)

#Set hist parameters
hist_height = 64
hist_width = 256
nbins = 32
bin_width = hist_width/nbins

camera_id = 0 # type fo webcam [0 built-in | 1 external]
cameraWidth = 320
cameraHeight = 240

if camera_id == 0:
cameraId = "PC webcam"
elif camera_id == 1:
cameraId = "External webcam"

camera = cv2.VideoCapture(camera_id)

# set camera image to 320 x 240 pixels
camera.set(3,cameraWidth)
camera.set(4,cameraHeight)

cameraInfo = "Image size (%d,%d)" % (camera.get(3),camera.get(4))

# initialize mask matrix
mask = np.zeros((cameraHeight,cameraWidth), np.uint8)

# draw a circle in mask matrix
cv2.circle(mask,(cameraWidth/2,cameraHeight/2), 50, 255, -1)

#Create an empty image for the histogram
h = np.zeros((hist_height,hist_width))

#Create array for the bins
bins = np.arange(nbins,dtype=np.int32).reshape(nbins,1)

while True:
# grab the current frame
(grabbed, frame) = camera.read()

if not grabbed:
"Camera could not be started."
break

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#Calculate and normalise the histogram
hist_hue = cv2.calcHist([hsv],[0],mask,[nbins],[0,256])
cv2.normalize(hist_hue,hist_hue,hist_height,cv2.NORM_MINMAX)
hist=np.int32(np.around(hist_hue))
pts = np.column_stack((bins,hist))

#Loop through each bin and plot the rectangle in white
for x,y in enumerate(hist):
cv2.rectangle(h,(x*bin_width,y),(x*bin_width + bin_width-1,hist_height),(255),-1)

#Flip upside down
h=np.flipud(h)

#Show the histogram
cv2.imshow('Color Histogram',h)
h = np.zeros((hist_height,hist_width))

frame = cv2.bitwise_and(frame,frame,mask = mask)
cv2.putText(frame, cameraInfo, (10, 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

cv2.imshow(cameraId, frame)
key = cv2.waitKey(1) & 0xFF

# if the `q` key is pressed, break from the loop
if key == ord("q"):
break

camera.release()
cv2.destroyAllWindows()

该代码基于来自 JohnLinux 帖子 ( How do I plot a 32-Bin Histogram for a Grayscale Image in Python using OpenCV) 的代码,其他代码行来自我从 Adrian Rosenbrock 的网站 https://www.pyimagesearch.com/ 中学到的内容.

关于python - 我的摄像头实时直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38636520/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com