前言

1.首先下载opencv

2.没有用System.loadLibrary(Core.NATIVE_LIBRARY_NAME);配置比较繁琐,采用了System.load(ClassLoader.getSystemResource("lib/opencv_java440.dll").getPath());这种方式不用那么多配置,简单实用

简化版

package com.callOpencv;

import org.opencv.core.*;

import org.opencv.imgcodecs.Imgcodecs;

import org.opencv.imgproc.Imgproc;

import org.opencv.videoio.VideoCapture;

import org.opencv.videoio.Videoio;

import java.text.SimpleDateFormat;

import java.util.Arrays;

import java.util.Date;

public class CallOpenCv {

private static String rtsp_64 = "rtsp://账号:密码@192.168.0.64:554/stream0";

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

private static String dir = "D:/VideoRec/Img";

private static Integer sleepCount = 0;

public static void main(String[] args) {

openVideo();

}

private static void openVideo() {

VideoCapture capture = null;

try {

System.load("D:/Program/opencv/build/java/x64/opencv_java440.dll");

capture = new VideoCapture();

capture.open(rtsp_64);

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!");

}

Mat capImg = new Mat();

Mat temp = new Mat();

while (true) {

capture.read(capImg);

//opencv是1s读取24张图片(大概),想要1s处理一次,【先读取再扔掉】

if (++sleepCount <= 25) {

continue;

}

sleepCount = 0;

Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_RGB2GRAY);

Imgcodecs.imwrite(dir + "/" + sdf.format(new Date()) + ".jpg", temp);

}

} catch (Exception e) {

System.out.println("异常:" + e.getMessage() + " --- " + Arrays.toString(e.getStackTrace()));

} finally {

if (capture != null && capture.isOpened()) {

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

capture.release();

}

}

}

}

package com;

import java.awt.Graphics;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseWheelEvent;

import java.awt.image.BufferedImage;

import java.net.URL;

import java.util.Arrays;

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.core.MatOfDouble;

import org.opencv.core.MatOfRect;

import org.opencv.core.Point;

import org.opencv.core.Rect;

import org.opencv.core.Scalar;

import org.opencv.imgcodecs.Imgcodecs;

import org.opencv.imgproc.Imgproc;

import org.opencv.ml.SVM;

import org.opencv.objdetect.CascadeClassifier;

import org.opencv.objdetect.HOGDescriptor;

import org.opencv.videoio.VideoCapture;

import org.opencv.videoio.Videoio;

public class CaptureBasic extends JPanel {

private BufferedImage mImg;

public static void main(String[] args) {

try {

//加载本地native库 配置较繁琐,不用

// System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

//获取opencv.dll绝对路径 推荐

URL url = ClassLoader.getSystemResource("lib/opencv_java440.dll");

System.load(url.getPath());

//获取本地摄像头

// VideoCapture capture = new VideoCapture(0);

//获取网络摄像头

VideoCapture capture = new VideoCapture();

capture.open("rtsp://账号:密码@192.168.0.64:554/stream0");

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!");

}

//Java窗口容器

JFrame frame = new JFrame("camera");

frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

//Java画板容器

CaptureBasic panel = new CaptureBasic();

addMouseListener(panel);

//配置关系

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 capImg = new Mat();

Mat temp = new Mat();

while (frame.isShowing() && ++n < 500) {

//把摄像头数据读到Mat

capture.read(capImg);

//彩色空间转换,把图像转换为灰度的、占用空间小的

Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_RGB2GRAY);

// temp = capImg.clone();

//保存

Imgcodecs.imwrite("D:/VideoRec/Img/back" + n + ".png", temp);

//进行人脸识别

Mat mat = detectFace(capImg);

//把识别画框图像放在画板上

panel.mImg = panel.mat2BI(mat);

//绘制

panel.repaint();

}

capture.release();

frame.dispose();

} catch (Exception e) {

System.out.println("异常:" + e.getMessage() + " --- " + Arrays.toString(e.getStackTrace()));

} finally {

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

}

}

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;

}

/**

* opencv实现人脸识别

*

* @param img

*/

public static Mat detectFace(Mat img) throws Exception {

System.out.println("Running DetectFace ... ");

// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中

// CascadeClassifier faceDetector = new CascadeClassifier("D:\\TDDOWNLOAD\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");

CascadeClassifier faceDetector = new CascadeClassifier("D:/Program/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml");

// 在图片中检测人脸

MatOfRect faceDetections = new MatOfRect();

faceDetector.detectMultiScale(img, faceDetections);

//System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));

Rect[] rects = faceDetections.toArray();

if (rects != null && rects.length >= 1) {

for (Rect rect : rects) {

Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),

new Scalar(0, 0, 255), 2);

}

}

return img;

}

/**

* opencv实现人型识别,hog默认的分类器。所以效果不好。

*

* @param img

*/

public static Mat detectPeople(Mat img) {

//System.out.println("detectPeople...");

if (img.empty()) {

System.out.println("image is exist");

}

HOGDescriptor hog = new HOGDescriptor();

hog.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());

System.out.println(HOGDescriptor.getDefaultPeopleDetector());

//hog.setSVMDetector(HOGDescriptor.getDaimlerPeopleDetector());

MatOfRect regions = new MatOfRect();

MatOfDouble foundWeights = new MatOfDouble();

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

hog.detectMultiScale(img, regions, foundWeights);

for (Rect rect : regions.toArray()) {

Imgproc.rectangle(img, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 0, 255), 2);

}

return img;

}

/**

* 画到容器

*

* @param g

*/

public void paintComponent(Graphics g) {

if (mImg != null) {

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

}

}

/**

* 添加鼠标监听

*

* @param panel

*/

private static void addMouseListener(CaptureBasic panel) {

panel.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

System.out.println("click");

}

@Override

public void mousePressed(MouseEvent e) {

System.out.println("mousePressed");

}

@Override

public void mouseReleased(MouseEvent e) {

System.out.println("mouseReleased");

}

@Override

public void mouseEntered(MouseEvent e) {

System.out.println("mouseEntered");

}

@Override

public void mouseExited(MouseEvent e) {

System.out.println("mouseExited");

}

@Override

public void mouseWheelMoved(MouseWheelEvent e) {

System.out.println("mouseWheelMoved");

}

@Override

public void mouseDragged(MouseEvent e) {

System.out.println("mouseDragged");

}

@Override

public void mouseMoved(MouseEvent e) {

System.out.println("mouseMoved");

}

});

}

}

java opencv 打开图片路径_Java 调用 OpenCV (可获取到图像)相关推荐

  1. linux opencv打开图片路径,OpenCV读取图像_显示图像_保存图像

    读入图像﹑显示图像和保存图像是图像处理过程中最基本的,也是必不可少的操作. 配置好OpenCV 以后,包含以下两个头文件: #include "cv.h" #include &qu ...

  2. Ubuntu下使用opencv打开图片视频

    Ubuntu下使用opencv打开图片视频 一.安装opencv 二.配置环境 1.安装完成后,开始配置环境 2.更新系统共享链接库 3.修改bash.bashrc 文件 4.完成后执行命令 三.打开 ...

  3. python opencv 得到图片路径image_path的宽wide、高heigh和深度deep

    python opencv 得到图片路径image_path的宽wide.高heigh和深度deep 图片路径是:'1.jpg' 下面是具体代码: import cv2 #得到图片路径image_pa ...

  4. OPENCV打开图片进行边缘检测

    OPENCV打开图片并且进行边缘检测 #ifdef _CH_ #pragma package <opencv> #endif#ifndef _EiC #include "cv.h ...

  5. java图片降噪_Java基于opencv实现图像数字识别(四)—图像降噪

    Java基于opencv实现图像数字识别(四)-图像降噪 我们每一步的工作都是基于前一步的,我们先把我们前面的几个函数封装成一个工具类,以后我们所有的函数都基于这个工具类 这个工具类呢,就一个成员变量 ...

  6. 【OpenCV学习】使用OpenCV打开图片视频

    一.使用代码打开一张图片 代码如下: #include <opencv.hpp>int main() {cv::Mat img = cv::imread("D://My Code ...

  7. opencv打开图片转换为二进制

    为了实现对学生投入的二手书进行书名,使用百度api的ocr. 百度api要求以二进制读入图片,才能输出一个字典. 本demo采用opencv读入相机的第一帧,对读入图像不做预处理. 采用一下代码进行二 ...

  8. python opencv 打开图片时遇到 Premature end of JPEG file 问题的解决办法

    遇到Premature end of JPEG file的问题 当用cv2.imread打开图片时有时会遇到这样的问题,虽然不影响网络的训练,但是会看着很心烦,这里就介绍一种方法可以让我们快速的找到有 ...

  9. 在java中图片路径_java中获取图片路径三中方法

    java中获取图片路径的方法 //获取路径三中方法 //+ f.getOriginalFilename(); //String filedir = Thread.currentThread().get ...

  10. java 获取图片的路径_Java中使用正则表达式获取网页中所有图片的路径

    /** * 从HTML源码中提取图片路径,最后以一个 String 类型的 List 返回,如果不包含任何图片,则返回一个 size=0 的List * 需要注意的是,此方法只会提取以下格式的图片:. ...

最新文章

  1. 51nod 最长公共子序列测试 【LCS+回溯】
  2. 帆软css修改按钮立体,FineReport 控件的 CSS 样式
  3. Unity网络多玩家游戏开发教程(上册)
  4. 大型神经网络可能初具意识:OpenAI首席科学家引争议,众大佬吵成一团
  5. java 反射field_java – 使用反射获取Field的泛型类型
  6. Linux系统中文件^M乱码解决
  7. java学习(56):接口之间的继承续
  8. codeforces 136A-C语言解题报告
  9. C++类的成员函数(在类外定义成员函数、inline成员函数)
  10. 【案例】复制静止问题一则
  11. LODOP 打印图片和表格
  12. 博途调试g120_两台G120带异步伺服做主从控制,转速控制不好,请问该怎么调试G120...
  13. 问卷调查试卷的数据设计
  14. 新能源电动汽车的充电
  15. 你的优秀与我无关 活的自由胜过成功------彭怡平(转载)
  16. python 身份证校验
  17. 香港渣打银行开户价格是多少?
  18. opencv canny源码解析_行人检测 基于 OpenCV 的人体检测
  19. ANSYS_APDL在绘制 vonMises(等效)应力云图报错:The requested data S is not available.The PLES command is ignored.
  20. docker如何查看宿主机到容器端口映射

热门文章

  1. 拍照识别身份证 Android/iOS身份证识别技术
  2. 开启智慧新生活 新余市智慧城市建设全省率先
  3. GWR4软件怎么用+结果解读+结果在ArcGIS中可视化
  4. 数字证书及CA的详细理解
  5. kaptcha谷歌验证码工具
  6. GIS中常用的高程系
  7. 破解vysor为专业版
  8. Java 全栈知识体系( PDF 可下载)
  9. Python类调用实例方法
  10. 2021华为软挑赛题_思路分析——实时更新,做多少更多少(四)