双摄像头实时预览与图像处理系统

发布时间:2026/10/22 20:34:18
双摄像头实时预览与图像处理系统 多线程相关知识点进程与线程的概念进程进行中的程序任何一个进程至少有一个线程进程是操作系统分配资源的最小单位线程进程中的一个子分支可以独立运行CPU执行的最小单位物理线程CPU的逻辑处理器数CPU在绝对的同时只能执行这个数量的线程线程开关控制开需要有新的线程对象创建并启动关一个线程结束执行的唯一标准是run方法中的代码执行完毕Cam1Show打开摄像头1灰度马赛克滤镜处理绘制到窗口import com.github.sarxos.webcam.Webcam; import java.awt.*; import java.awt.image.BufferedImage; public class Cam1Show extends Thread{ Webcam cam;//摄像头对象 Graphics g; public void run(){//线程启动后执行的代码 //1.设置摄像头分辨率 cam.setViewSize(new Dimension(640,480)); //2.打开摄像头 cam.open(); System.out.println(相机1打开); //3.无限循环不断读取画面并处理 while (true){ if(!cam.isOpen()){ break; } //4.获取一帧画面 BufferedImage imagecam.getImage(); //5.灰度马赛克处理 for (int i 0; i image.getWidth()-10; i10) { for (int j 0; j image.getHeight()-10; j10) { //获取采样点颜色 int rgbimage.getRGB(i,j); Color c1new Color(rgb); int redc1.getRed(); int greenc1.getGreen(); int bluec1.getBlue(); //计算灰度值 int gray(redgreenblue)/3; Color c2new Color(gray,gray,gray); //将10x10区域全部转化为灰色 for(int k0;k10;k){ for (int l 0; l 10; l) { image.setRGB(ik,jl,c2.getRGB()); } } } } //6.将处理后的画面绘制到窗口上 g.drawImage(image,80,100,null); } System.out.println(相机1关闭); System.out.println(this.getState());//打印线程状态 } }Cam2Show打开摄像头2直接显示原始画面绘制到窗口import java.awt.*; import java.awt.image.BufferedImage; public class Cam2Show extends Thread{ Webcam cam; Graphics g; public void run(){ cam.setViewSize(new Dimension(640,480)); cam.open(); System.out.println(相机2打开); while(true){ if(!cam.isOpen()){ break; } BufferedImage imagecam.getImage(); g.drawImage(image,750,100,null); } System.out.println(相机2关闭); System.out.println(this.getState()); } }CamListener响应按钮点击开启/关闭对应摄像头线程import com.github.sarxos.webcam.Webcam; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class CamListener implements ActionListener{ Webcam cam1; Webcam cam2; Cam1Show cam1Show;//摄像头1的线程对象 Cam2Show cam2Show;//摄像头2的线程对象 JFrame jf; Override public void actionPerformed(ActionEvent e) { String ace.getActionCommand();//获取按钮文字 JButton btn(JButton) e.getSource();//获取被点击的按钮 if(ac.equals(相机1开启)){ btn.setText(相机1关闭); cam1Shownew Cam1Show(); cam1Show.gjf.getGraphics(); cam1Show.camcam1; cam1Show.start();//启动线程 }else if(ac.equals(相机1关闭)){ btn.setText(相机1开启); cam1.close(); cam1Show.interrupt(); } else if (ac.equals(相机2开启)) { btn.setText(相机2关闭); cam2Shownew Cam2Show(); cam2Show.gjf.getGraphics(); cam2Show.camcam2; cam2Show.start(); } else if (ac.equals(相机2关闭)) { btn.setText(相机2开启); cam2.close(); cam2Show.interrupt(); } } }Test1类获取摄像头列表创建窗口创建两个按钮控制摄像头开启/关闭创建两个显示线程连接按钮与监听器import com.github.sarxos.webcam.Webcam; import javax.swing.*; import java.awt.*; import java.util.List; public class Test1 { static void main() { //1.获取电脑上所有摄像头 ListWebcam webcamListWebcam.getWebcams(); for (int i 0; i webcamList.size(); i) { System.out.println(webcamList.get(i).getName()); } Webcam cam1webcamList.get(0);//第一个摄像头 Webcam cam2webcamList.get(2);//第三个摄像头 //2.创建窗口 JFrame jfnew JFrame(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setSize(1500,900); jf.setLocationRelativeTo(null); jf.setLayout(null); //3.创建两个按钮 JButton btn1new JButton(相机1开启); JButton btn2new JButton(相机2开启); btn1.setBounds(300,600,100,50); btn2.setBounds(800,800,100,50); jf.add(btn1); jf.add(btn2); jf.setVisible(true); //4.创建两个显示线程对象 Cam1Show cam1Shownew Cam1Show(); Cam2Show cam2Shownew Cam2Show(); //5.获取画笔 Graphics gjf.getGraphics(); cam1Show.gg; cam2Show.gg; cam1Show.camcam1; cam2Show.camcam2; //6.创建监听器并连接按钮 CamListener cam3new CamListener(); cam3.cam1cam1; cam3.cam1Showcam1Show; cam3.jfjf; btn1.addActionListener(cam3); CamListener cam4new CamListener(); cam4.cam2cam2; cam4.cam2Showcam2Show; cam4.jfjf; btn2.addActionListener(cam4); } }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询