Java + OpenCV 实现拍照

JAVA新实战3:opencv+java应用初探 这两天在写一个地图瓦片采集工具,在将瓦片应用到geoserver时,需要将瓦片进行合并,因为合成的图片很大,决定使用opencv进行实现,虽然有点高射炮打蚊子的感觉,但还是用一下子,顺便把opencv与java开发环境下的使用进行一个总结和分享。opencv的强大是公认的,希望本篇文章能在初步使用该跨平台计算机视觉和机器学习软件库上带给您一点点帮助,后面一篇文章我将给出完整的瓦片下载和合并模块的代码。 阅读详情

由于项目需要拍照,看了好多的资料不是C语言的就是python,开始用的JavaCv但是有好多问题,所以改成了OpenCv

只能硬着上了,查了好的网上的资料,终于找到了

依赖jar包:只有一个OpenCv的jar包,可以直接从官网上下载

下面上代码

import java.awt.Graphics;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;

public class CaptureBasic extends JPanel {

    private static BufferedImage mImg;
    private static VideoCapture capture;
    private static  Mat capImg;

    private BufferedImage mat2BI(Mat mat){
        int dataSize =mat.cols()*mat.rows()*(int)mat.elemSize();
        byte[] data=new byte[dataSize];
        mat.get(0, 0,data);
        int type=mat.channels()==1?
                BufferedImage.TYPE_BYTE_GRAY:BufferedImage.TYPE_3BYTE_BGR;

        if(type==BufferedImage.TYPE_3BYTE_BGR){
            for(int i=0;i<dataSize;i+=3){
                byte blue=data[i+0];
                data[i+0]=data[i+2];
                data[i+2]=blue;
            }
        }
        BufferedImage image=new BufferedImage(mat.cols(),mat.rows(),type);
        image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);

        return image;
    }

    public void paintComponent(Graphics g){
        if(mImg!=null){
            g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);
        }
    }

    public static void main(String[] args) {
        try{
            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

            capImg=new Mat();
            capture =new VideoCapture(0);
           // capture.open(0);
            int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);
            int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);
            if(height==0||width==0){
                throw new Exception("camera not found!");
            }

            JFrame frame=new JFrame("camera");
            frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            CaptureBasic panel=new CaptureBasic();
            panel.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent arg0) {
                     System.out.println("click");
                     saveImg();
                }
                @Override
                public void mouseMoved(MouseEvent arg0) {
                    System.out.println("move");

                }
                @Override
                public void mouseReleased(MouseEvent arg0) {
                    System.out.println("mouseReleased");
                }
                @Override
                public void mousePressed(MouseEvent arg0) {
                    System.out.println("mousePressed");
                }
                @Override
                public void mouseExited(MouseEvent arg0) {
                    System.out.println("mouseExited");
                    //System.out.println(arg0.toString());
                }
                @Override
                public void mouseDragged(MouseEvent arg0) {
                    System.out.println("mouseDragged");
                    //System.out.println(arg0.toString());
                }});
            frame.setContentPane(panel);
            frame.setVisible(true);
            frame.setSize(width+frame.getInsets().left+frame.getInsets().right,
                    height+frame.getInsets().top+frame.getInsets().bottom);
            int n=0;
            Mat temp=new Mat();
            while(frame.isShowing()&& n<5){
                System.out.println("第"+n+"张");
                capture.read(capImg);
                Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_BGRA2BGR);
               
               // Imgcodecs.imwrite("C:/HWKJ/opencv/"+n+".png", temp); //自动保存
               
               // panel.mImg=panel.mat2BI(detectFace(capImg));
               
                panel.mImg=panel.mat2BI(capImg);
                panel.repaint();
               // n++;
                //break;
            }
            capture.release();
           // frame.dispose();
        }catch(Exception e){
            System.out.println("例外:" + e);
        }finally{
            System.out.println("--done--");
        }

    }
    
    //点击面板
    public static void saveImg(){
        Mat temp=new Mat();
        int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);
        int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);
        capture.read(capImg);
        Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_BGRA2BGR);
        Imgcodecs.imwrite("C:/HWKJ/opencv/aaa.png", temp);
        System.out.println("保存图片");
    }
}

 点击在对应目录下生成的照片

Java使用OpenCV进行图像操作 OpenCV是一个开源的计算机视觉库,它提供了一系列丰富的图像处理和计算机视觉算法,包括图像读取、显示、滤波、特征检测、目标跟踪等功能。 阅读详情

相关推荐

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

本项目依赖于Keras深度学习模型,旨在对手语进行分类和实时识别。为了实现这一目标,项目结合了OpenCV库的相关算法,用于捕捉手部的位置,从而能够对视频流和图像中的手语进行实时识别。这对于听觉障碍者和手语使用者来说是一个有益的工具,可以帮助他们与其他人更轻松地进行交流和理解。

小胡说人工智能的博客 2446

在Java中使用OpenCV捕获摄像头并生成图片和视频信息

OpenCV的jar包引入和dll加载见上一篇博文:https://mp.youkuaiyun.com/editor/html/113079124 创建类VideoTest 首先加载dll动态库,然后使用vc=new VideoCapture(0)创建一个摄像机对象,索引0表示系统中的第1个摄像机,如果有多个摄像头时下标从0开始。VideoCapture还有一个构建方法,可以传入字符串,可以传入视频文件的路径以打开视频文件。 vc.isOpened()用来判断视频源是否成功打开 下面看代码吧: impor.

shuaijie506的专栏 2319

java使用opencv2.4.9调用摄像头拍照+保存到本地

java使用opencv2.4.9调用摄像头拍照+保存到本地前言需要的依赖jar包一览贴代码注意点参考的目录 前言 本博客仅供参考使用,现把观前提示写出: 1.语言java,jar包为opencv2.4.9 2.软件 eclipse,程序为rcp(富平台)程序 3.功能为直接调用电脑自带的摄像头,直接拍照并保存到本地,比如G:\image\,然后把图片路径+图片名存入变量,返回,分别其他类调用和取得图片的URL(指的是本地路径+图片名,比如G:\image\45849898_fsf.jpg) 需要的依赖ja

ruyujiexys的博客 1948

使用Tesseract和Python进行OCR和语言翻译

这篇博客将介绍如何使用Tesseract、Python自动进行OCR和文本翻译。**使用textblob,翻译文本就像单个函数调用一样简单。(textblob翻译底层调用translate.google.com会报超时等,用translators库实现翻译)**

qq_40985985的博客 915

Python自然语言处理 NLTK 库用法入门教程【经典】

@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 本文实例讲述了Python自然语言处理 NLTK 库用法。分享给大家供大家参考,具体如下: 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP)。本教程将会使用 Python NLTK 库。NLTK 是一个当下流行的,用于自然语言处理的 Python 库。 那么 NLP 到底是什么?学习 NLP 能带来什么好处? ...

python函数基础教程 1万+

OpenCV图像去畸变实战指南:从原理到参数调优(附完整代码与效果对比)

本文深入解析了OpenCV图像去畸变的原理与实战技巧,详细对比了标准透视、鱼眼及全能型omnidir三种校正函数的核心参数调优方法。通过分析alpha、balance、centerX/Y及focalScale四大参数对输出效果的影响,并结合完整代码与效果对比图,帮助开发者精准校正镜头畸变,提升计算机视觉任务精度。

weixin_29046611的博客 341

java opencv拍照_【opencv】Java实现opencv 调用本地摄像头,实现人脸识别、人形识别、人眼识别...

1 packagecom.lw.test;23 importjava.awt.Graphics;4 importjava.awt.event.MouseAdapter;5 importjava.awt.event.MouseEvent;6 importjava.awt.image.BufferedImage;78 importjavax.swing.JFrame;9 importjavax.swi...

weixin_36079936的博客 325

精读204页华为的流程管理(文末附下载链接)

链接:https://pan.baidu.com/s/1eEwdBR5c0PIxkOrNhDZcGg?pwd=wha2 提取码:wha2 复制这段内容后打开百度网盘手机App,操作更方便哦。,以提升企业运营效率和竞争力,同时解决了诸多业务痛点,为华为的全球化发展提供了有力支撑。华为的流程管理对其发展起着关键作用,通过构建完善的流程体系,提升了企业运营效率与竞争力。华为的流程管理在企业发展中至关重要,其围绕。,并通过流程变革不断优化。在流程管理过程中,强调。构建了全面的流程体系。

cdfunlove的博客 283

java opencv拍照_Java+OpenCV实现人脸检测并自动拍照

java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。环境配置:win7 64位,jdk1.8CameraBasic.javapackage com.njupt.zhb.test;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax...

weixin_35422230的博客 235

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

努力,加油每一天鸭~ 826

使用机器学习算法预测黄金价格

在本文中,我们将使用线性回归、XGBoost和LSTM这三种不同的机器学习算法来预测黄金价格。接下来,我们使用线性回归、XGBoost和LSTM分别建立了模型,并进行了训练和预测。这些机器学习算法可以帮助我们对黄金价格进行预测,但请注意,市场价格受多种因素影响,因此预测结果可能并不完全准确。接下来,我们需要对数据进行一些预处理,以便用于机器学习模型的训练和测试。我们将使用80%的数据作为训练集,20%的数据作为测试集。最后,我们将绘制每个模型的预测结果,并将其与实际价格进行比较,以评估模型的性能。

QromMatlab的博客 1316

java 拍照上传文件_java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置...

代码片段和文件信息packagecom.gavin.gui;importjava.awt.Color;importjava.awt.Component;importjava.awt.Cursor;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Rectangle;importjava.awt.Toolkit;im...

weixin_39542608的博客 219

7、树莓派故障排查全攻略

本文详细介绍了树莓派在使用过程中常见的各类故障及其排查方法。内容涵盖键盘鼠标诊断、电源诊断、显示诊断、启动诊断、网络诊断以及紧急内核的使用,提供了具体的解决方法和实用建议。同时,文章总结了故障排查流程、常见故障及解决方法的汇总,并给出了注意事项和操作建议,帮助用户高效解决树莓派使用过程中的问题,确保其稳定运行。

cream的博客 324

Java8+OpenCV4.0.1实现控制摄像头连续拍照功能(Windows版)

OpenCV实现控制摄像头连续拍照功能

MaxBigBug的博客 626

Python 爬虫实战:医学临床指南爬取(含 PDF 解析与结构化存储)

在当今数字化时代,医学临床指南作为医生进行科学诊疗的重要参考资料,包含大量经过临床验证的诊疗路径和建议。这些指南通常发布在权威医学网站上,数量庞大且更新频繁。如何自动化地抓取并存储这些指南,成为医疗数据分析、医学研究以及医疗 AI 模型训练等工作的关键第一步。本文将系统讲解如何利用 Python 爬虫技术从权威医学网站爬取临床指南内容,并实现 PDF 解析与结构化存储。

u014481728的博客 450

串口、COM、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1-WIRE

一文搞定,赶紧收藏吧

记得诚 3万+

Java自动拍照_Java+OpenCV实现人脸检测并自动拍照

java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。环境配置:win7 64位,jdk1.8CameraBasic.javapackage com.njupt.zhb.test;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax...

weixin_39946964的博客 512

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java opencv 拍照扫描仪实现

java opencv 拍照扫描仪实现。

u010747944的博客 245

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java 人脸检测_Java+OpenCV实现人脸检测并自动拍照

java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。环境配置:win7 64位,jdk1.8CameraBasic.javapackage com.njupt.zhb.test;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax...

weixin_34217656的博客 419

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python 人脸检测自动拍照_Java+OpenCV实现人脸检测并自动拍照

java+opencv实现人脸检测,调用笔记本摄像头实时抓拍,人脸会用红色边框标识出来,并且将抓拍的目录存放在src下,图片名称是时间戳。环境配置:win7 64位,jdk1.8CameraBasic.javapackage com.njupt.zhb.test;import java.awt.EventQueue;import javax.swing.ImageIcon;import javax...

weixin_39568233的博客 289

Java获取实时摄像头进行拍照(附源码)

Java是一种通用编程语言,可以用来开发各种类型的应用程序,包括涉及图像处理和相机操作的应用程序。要在Java中获取实时摄像头进行拍照,通常会借助一些,例如或等。这些库和API提供了访问摄像头和图像处理的功能。通过使用这些库和API,你可以编写Java代码来调用摄像头并实时获取视频流。然后,你可以选择从视频流中捕获图像并保存为图片文件。这样,你就能够实现在Java中获取实时摄像头进行拍照的功能。

无法自律的人的博客 5434

JavaScript(JS)+OpenCV+OSS,JS整合OpenCV实现拍照,并把照片上传到OSS(Demo)

JavaScript整合Opencv拍照并且将图片上传到oss

MaxBigBug的博客 608

java opencv 调用摄像头实现拍照及本地保存 支持上传FTP 路径配置

工程结构 运行效果: 本地路径配置: FTP路径配置: 本地保存: 上传FTP: 源码下载:http://download.youkuaiyun.com/download/u010587724/10151270 PS:个人水平有限,代码结构未整理,基本实现功能,欢迎交流

u010587724的博客 2734

java-opencv拍照(可自定义分辨率)

结果 摄像头拍一张照保存在D:\\1.png里 扩展 VideoCapture类get方法返回设置的摄像头分辨率,参数是3(宽度)或4(高度),用set方法设置为10000后调用get会返回摄像头最大的分辨率 VideoCapture类isOpenedt方法返回摄像头是否成功打开......

expisecm的博客 1194
上一篇: Android 开发之Loading
下一篇: JAVA 图像处理基于OpenCv与JVM-----环境搭建
Java程序之猿
博客等级 码龄9年 2599粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值