opencv
opencv下载:https://opencv.org/releases/
解压后找到java中的opencv_java460.dll放到C:\Windows\System32下
ubuntu系统安装方式:
# 更新
sudo apt update
# 安装
sudo apt install libopencv-dev
# 查看版本
dpkg -l | grep libopencv-dev
Java播放USB摄像头
引入maven
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.6.0-0</version>
</dependency>
Java代码
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;
import org.opencv.highgui.HighGui;
public class Demo {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
// 0为默认摄像头
VideoCapture camera = new VideoCapture(0);
if (!camera.isOpened()) {
System.out.println("Error: 摄像头打开失败");
return;
}
// 设置分辨率
camera.set(Videoio.CAP_PROP_FRAME_WIDTH, 640);
camera.set(Videoio.CAP_PROP_FRAME_HEIGHT, 480);
// 设置视频编码格式为MJPEG,用于压缩视频流,减少传输数据量并提升帧率
camera.set(Videoio.CAP_PROP_FOURCC, Videoio.CAP_OPENCV_MJPEG);
Mat frame = new Mat();
Mat blurredFrame = new Mat();
while (true) {
if (camera.read(frame)) {
// 应用高斯模糊进行降噪处理
// 参数分别是:输入图像、输出图像、X方向的标准差、Y方向的标准差
Imgproc.GaussianBlur(frame, blurredFrame, new Size(5, 5), 0);
HighGui.imshow("Camera with Noise Reduction", blurredFrame);
int key = HighGui.waitKey(10);
if (key == 27) {
break;
}
} else {
System.out.println("无法从摄像头获取帧");
break;
}
}
camera.release();
}
}
调整树莓派配置
超频CPU/GPU
# 在/boot/firmware/config.txt末尾添加
over_voltage=2
arm_freq=1500
gpu_freq=500
gpu_mem=256
查看显存大小
vcgencmd get_mem gpu
python
依赖
pip install opencv-python
播放USB摄像头
import cv2
# 打开默认摄像头(通常为0,如果你有多个摄像头,可能需要尝试1, 2等)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("无法打开摄像头")
exit()
# 设置摄像头的属性:宽度、高度和帧率
# 注意:并非所有摄像头都支持更改这些设置,实际值可能会有所不同
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) # 设置宽度
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) # 设置高度
cap.set(cv2.CAP_PROP_FPS, 90) # 设置帧率
# 检查设置是否成功
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print(f'Width: {width}, Height: {height}, FPS: {fps}')
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,则ret为True
if not ret:
print("无法接收帧(可能是流结束或摄像头连接有问题)")
break
# 在窗口中显示帧
cv2.imshow('USB Camera', frame)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 完成后释放捕获器和关闭所有OpenCV窗口
cap.release()
cv2.destroyAllWindows()