利用Java+OpenCV实现拍照功能

网友投稿 376 2022-09-05


利用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 {undefined

private static BufferedImage mImg;

private static VideoCapture capture;

private static Mat capImg;

private BufferedImage mat2BI(Mat mat){undefined

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){undefined

for(int i=0;i

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){undefined

if(mImg!=null){undefined

g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);

}

}

public static void main(String[] args) {undefined

try{undefined

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){undefined

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() {undefined

@Override

public void mouseClicked(MouseEvent arg0) {undefined

System.out.println("click");

saveImg();

}

@Override

public void mouseMoved(MouseEvent arg0) {undefined

System.out.println("move");

}

@Override

public void mouseReleased(MouseEvent arg0) {undefined

System.out.println("mouseReleased");

}

@Override

public void mousePressed(MouseEvent arg0) {undefined

System.out.println("mousePressed");

}

@Override

public void mouseExited(MouseEvent arg0) {undefined

System.out.println("mouseExited");

//System.out.println(arg0.toString());

}

@Override

public void mouseDragged(MouseEvent arg0) {undefined

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){undefined

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){undefined

System.out.println("例外:" + e);

}finally{undefined

System.out.println("--done--");

}

}

//点击面板

public static void saveImg(){undefined

Mat tehttp://mp=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("保存图片");

}

}

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

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){undefined

if(mImg!=null){undefined

g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);

}

}

public static void main(String[] args) {undefined

try{undefined

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){undefined

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() {undefined

@Override

public void mouseClicked(MouseEvent arg0) {undefined

System.out.println("click");

saveImg();

}

@Override

public void mouseMoved(MouseEvent arg0) {undefined

System.out.println("move");

}

@Override

public void mouseReleased(MouseEvent arg0) {undefined

System.out.println("mouseReleased");

}

@Override

public void mousePressed(MouseEvent arg0) {undefined

System.out.println("mousePressed");

}

@Override

public void mouseExited(MouseEvent arg0) {undefined

System.out.println("mouseExited");

//System.out.println(arg0.toString());

}

@Override

public void mouseDragged(MouseEvent arg0) {undefined

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){undefined

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){undefined

System.out.println("例外:" + e);

}finally{undefined

System.out.println("--done--");

}

}

//点击面板

public static void saveImg(){undefined

Mat tehttp://mp=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("保存图片");

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django 模型查询2.3(django xadmin)
下一篇:Django 模型成员2.2(django xadmin)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~