前言:如需转载请注明出处: 图形识别-基于opencv+java简单程序_x业精于勤x的博客-CSDN博客
OpenCV的 全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类 构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了 图像处理和计算机视觉方面的很多通用算法。

OpenCV用C++语言编写,它的主要接口也是C++语言,但是依然保留了大量的C语言接口。该库也有大量的Python, Java and MATLAB/OCTAVE (版本2.5)的接口。这些语言的API接口函数可以通过在线文档获得。如今也提供对于C#,Ch, Ruby的支持。

本文着重讲述opencv+java的实现程序,关于opencv的如何引入dll库等操作以及c的实现就不在这里概述了

直接开始,首先下载opencv,引入opencv-246.jar包以及对应dll库

1.背景去除 简单案列,只适合背景单一的图像

import java.util.ArrayList;
import java.util.List;import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;/*** @Description 背景去除 简单案列,只适合背景单一的图像* @author XPY* @date 2016年8月30日下午4:14:32*/
public class demo1 {public static void main(String[] args) {System.loadLibrary("opencv_java246");Mat img = Highgui.imread("E:\\opencv_img\\source\\1.jpg");//读图像Mat new_img = doBackgroundRemoval(img);Highgui.imwrite("E:\\opencv_img\\target\\1.jpg",new_img);//写图像}private static Mat doBackgroundRemoval(Mat frame) {// initMat hsvImg = new Mat();List<Mat> hsvPlanes = new ArrayList<>();Mat thresholdImg = new Mat();int thresh_type = Imgproc.THRESH_BINARY_INV;// threshold the image with the average hue valuehsvImg.create(frame.size(), CvType.CV_8U);Imgproc.cvtColor(frame, hsvImg, Imgproc.COLOR_BGR2HSV);Core.split(hsvImg, hsvPlanes);// get the average hue value of the imageScalar average = Core.mean(hsvPlanes.get(0));double threshValue = average.val[0];Imgproc.threshold(hsvPlanes.get(0), thresholdImg, threshValue, 179.0,thresh_type);Imgproc.blur(thresholdImg, thresholdImg, new Size(5, 5));// dilate to fill gaps, erode to smooth edgesImgproc.dilate(thresholdImg, thresholdImg, new Mat(),new Point(-1, -1), 1);Imgproc.erode(thresholdImg, thresholdImg, new Mat(), new Point(-1, -1),3);Imgproc.threshold(thresholdImg, thresholdImg, threshValue, 179.0,Imgproc.THRESH_BINARY);// create the new imageMat foreground = new Mat(frame.size(), CvType.CV_8UC3, new Scalar(255,255, 255));thresholdImg.convertTo(thresholdImg, CvType.CV_8U);frame.copyTo(foreground, thresholdImg);// 掩膜图像复制return foreground;}
}

2.边缘检测

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;/*** @Description 边缘检测* @author XPY* @date 2016年8月30日下午5:01:01*/
public class demo2 {public static void main(String[] args) {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat img = Highgui.imread("E:\\face7.jpg");//读图像Mat new_img = doCanny(img);Highgui.imwrite("E:\\opencv_img\\target\\2.jpg",new_img);//写图像}private static Mat doCanny(Mat frame){// initMat grayImage = new Mat();Mat detectedEdges = new Mat();double threshold = 10;// convert to grayscaleImgproc.cvtColor(frame, grayImage, Imgproc.COLOR_BGR2GRAY);// reduce noise with a 3x3 kernelImgproc.blur(grayImage, detectedEdges, new Size(3, 3));       // canny detector, with ratio of lower:upper threshold of 3:1Imgproc.Canny(detectedEdges, detectedEdges, threshold, threshold * 3);         // using Canny's output as a mask, display the resultMat dest = new Mat();frame.copyTo(dest, detectedEdges);return dest;}
}

3.人脸检测技术 (靠边缘的和侧脸检测不准确)

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.highgui.Highgui;
import org.opencv.objdetect.CascadeClassifier;  /*** * @Description 人脸检测技术 (靠边缘的和侧脸检测不准确)* @author XPY* @date 2016年9月1日下午4:47:33*/
public class demo3 {  public static void main(String[] args) {  System.out.println("Hello, OpenCV");  // Load the native library.  System.loadLibrary("opencv_java246");  new demo3().run();  }  public void run() {  System.out.println("\nRunning DetectFaceDemo");  System.out.println(getClass().getResource("/haarcascade_frontalface_alt2.xml").getPath());  // Create a face detector from the cascade file in the resources  // directory.  //CascadeClassifier faceDetector = new CascadeClassifier(getClass().getResource("haarcascade_frontalface_alt2.xml").getPath());  //Mat image = Highgui.imread(getClass().getResource("lena.png").getPath());  //注意:源程序的路径会多打印一个‘/’,因此总是出现如下错误  /* * Detected 0 faces Writing faceDetection.png libpng warning: Image * width is zero in IHDR libpng warning: Image height is zero in IHDR * libpng error: Invalid IHDR data */  //因此,我们将第一个字符去掉  String xmlfilePath=getClass().getResource("/haarcascade_frontalface_alt2.xml").getPath().substring(1);  CascadeClassifier faceDetector = new CascadeClassifier(xmlfilePath);  Mat image = Highgui.imread("E:\\face2.jpg");  // Detect faces in the image.  // MatOfRect is a special container class for Rect.  MatOfRect faceDetections = new MatOfRect();  faceDetector.detectMultiScale(image, faceDetections);  System.out.println(String.format("Detected %s faces", faceDetections.toArray().length));  // Draw a bounding box around each face.  for (Rect rect : faceDetections.toArray()) {  Core.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0));  }  // Save the visualized detection.  String filename = "E:\\faceDetection.png";  System.out.println(String.format("Writing %s", filename));  System.out.println(filename);Highgui.imwrite(filename, image);  }  }

人脸检测需要自行下载haarcascade_frontalface_alt2.xml文件

附上demo下载地址:http://download.csdn.net/download/xiaopy_0508/9848511,运行需自行引入opencv的dll文件

图形识别-基于opencv+java简单程序相关推荐

  1. 一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字。您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑

    一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字.您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑 import cv2 import numpy as np imp ...

  2. 基于OpenCV实现简单人脸面具、眼镜、胡须、鼻子特效(详细步骤 + 源码)

    点击下方卡片,关注"OpenCV与AI深度学习"公众号! 视觉/图像重磅干货,第一时间送达! 导读 本文给大家分享一个基于OpenCV实现简单人脸面具.眼镜.胡须.鼻子特效的实例, ...

  3. Microwindows及基于Nano-X的简单程序开发

    http://www.rdxx.com 05年09月13日 22:26 Blog.ChinaUnix.net Nano-X是一种图形编程接口,和Win32一样,在上面我们可以编写自己的应用程序,下面转 ...

  4. 基于OpenCV的简单人脸识别系统

    目录 1. 调用库函数 2. 调用摄像头并设置窗口 3. 设置图片正负样本数据集的路径 4. 调用人脸检测器 5. 正负样本载入 6.提取人脸区域 7. 建立LBPH人脸识别模型 8. 实时检测 9. ...

  5. 基于OpenCV的简单机读卡识别

    文章目录 一.简单介绍 二.步骤回顾 2.1 图像处理 2.1.1 图像的二值化 2.1.2 ROI(region of interest,感兴趣区域)的分割 a. 选择题部分分割 b. 数字部分分割 ...

  6. OpenCv Java 简单的图形轮廓绘制 (5)

    初学Opencv实现一点点的功能都感觉很是吃力,所以不得不写点东西记忆一下,不然明天又忘记了 好记星不如烂笔头 我就想能不能处分出图片中的正方形和圆形,标记出来,我们这边就绘制器图像,下一步就是认识图 ...

  7. 双目测距原理与基于opencv的简单实现

    双目测距基本原理: 如图,P是待测物体上的某一点,OR与OT分别是两个相机的光心,点P在两个相机感光器上的成像点分别为P和P'(相机的成像平面经过旋转后放在了镜头前方), f为相机焦距,B为两相机中 ...

  8. 基于opencv的简单视频处理类示例

    #include "opencv2/opencv.hpp" using namespace std; using namespace cv; class VideoProcesso ...

  9. 基于Opencv的简单双摄像头图像实时拼接

    #include"opencv2/opencv.hpp" using namespace cv; 行数相等拼接 同行拼接 Mat comMatR(Mat Matrix1,Mat M ...

最新文章

  1. c语言编程题餐饮服务打分,求详细分析C语言题餐饮服务质量调查打分题和答案..._质量员考试_帮考网...
  2. android中设置ListView的选中的Item的背景颜色(附源码)
  3. linux deepin “debconf: DbDriver “config“: config.dat 被另一个进程锁定:资源暂时不可用“
  4. 《统计学》学习笔记之数据的图表展示
  5. 数学结果告诉你足球的赛程安排并不能做到完全公平
  6. java线程卡住排查_基于 Java 线程栈 排查问题
  7. 远程过程调用RPC RMI(Remote Method Invocation)和Web Service
  8. windows 导入表(动态调用)
  9. Airflow 中文文档:初始化数据库后端
  10. 重磅发布!36氪2020年度中国最具登陆科创板潜力企业TOP50榜单揭晓
  11. git push 忽略.idea文件夹下的文件
  12. 万能平板刷机软件_一加万能工具包(手机万能刷机工具)
  13. 如何进行容器镜像加速?| 深度揭示阿里云 Serverless Kubernetes(3)
  14. picoCTF2022_wp@fgps
  15. c语言十佳歌手程序,十佳歌手决赛的细则流程
  16. bs前端设计--多页签界面
  17. java获取手机通讯录权限_Android读取手机通讯录联系人到自己项目
  18. 行业案例|长安汽车质量管理数据分析实践
  19. Linux:CentOS7安装
  20. 让Linux支持手机,让linux支持qq手机音乐播放

热门文章

  1. 下载了免费的txt电子书,如何用Windows电脑阅读?
  2. spirng4.0-@Conditional 按条件注册bean、@Import导入组件bean、@FactoryBean spring的bean工厂注册bean
  3. 问题分析方法 - swot的历史
  4. 铺装s路画法_数据管道的铺装之路
  5. python爬虫(最新的可以爬的妹子图)
  6. 每天五分钟机器学习:超平面分离定理和凸优化
  7. linux 查找内容与行号
  8. 半监督学习(Semi-Supervised Learning, SSL)-简述及论文整理
  9. 163电子邮件群发,做外贸用什么邮箱?企业邮箱怎么群发邮件?
  10. 2020国家网安周:建立开放协作的数据流动规则刻不容缓