Java 使用OpenCV进行颜色识别
文章目录
- Java使用OpenCV进行颜色识别
- 流程
- 详细步骤
- 库加载
- 图像读取
- 色域转换
- 直方图均衡化
- 输出二值图像
- 处理噪点
- 轮廓识别
- 结果处理
- 轮廓绘制
Java使用OpenCV进行颜色识别
流程
- 库加载
- 图像读取
- 色域转换
- 直方图均衡化(选用)
- 输出二值图像
- 噪点处理
- 轮廓识别
- 结果解析
详细步骤
库加载
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
图像读取
将图片读入到Mat中
Mat srcImgMat = Imgcodecs.imread(filename);
色域转换
读入的如果是RGB格式的文件,首先将图片转换到HSV色域中。具体什么事HSV自行百度。(选做。如果色彩情况复杂或者动态变化范围较大,建议)
Imgproc.cvtColor(srcImgMat, desImaMat, Imgproc.COLOR_RGB2HSV);
直方图均衡化
直方图均衡化可以增加颜色之间的对比度,更容易识别轮廓。由于目标颜色比较简单,所以此处略过。
输出二值图像
这里给出想要识别的颜色的阈值范围,使用的是HSV色域。如果你在一开始没有转换到HSV色域,则继续使用BGR来确定阈值的范围。
opencv HSV色域范围是H:0-179, S:0-255, V:0-255
建议此处根据不同场景多做调试。
写一个简单的有滑块的gui调试窗口并调用inRange,然后实时显示更方便调试。
//以蓝色为例Scalar lowerbScalar = new Scalar(100,50,50); //hsv色域的蓝色最低阈值Scalar highbScalar = new Scalar(130, 255, 255); //hsv色域蓝色最高阈值//获得二值图像。结果存到desImgMagCore.inRange(desImgMat, lowerbScalar, highbScalar, desImgMat);
处理噪点
上一步的结果可以直接通过显示出来;
HighGui.imshow(desImgMat);
HighGui.waitkey(0);
如果现实的二值图像噪点比较多,需要清除噪点。
//open processing 去除噪点,小于5x5的都将忽略Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(5,5));//close processing ,连通区域Imgproc.morphologyEx(desImgMat, desImgMat, Imgproc.MORPH_CLOSE, kernel);
处理完后,可以再现实图片查看效果。
轮廓识别
List<MatOfPoint> pointsVector = new Vector<MatOfPoint>();Mat hierarchy = new Mat();Imgproc.findContours(desImgMat, pointsVector, hierarchy, Imgproc.RETR_CCOMP,Imgproc.CHAIN_APPROX_SIMPLE);
这个函数返回值是一个pointsVector。这个Vector里每个元素都是所探测到的一个目标。第一个参数是要识别的图片,第二个是结果,第三个是一些更复杂的结果。第四个第五个如下:
- Imgproc.RETR_CCOMP 提取所有轮廓,还有其他的参数,比如RETR_EXTERNAL是提取外层轮廓。
- Imgproc.CHAIN_APPROX_SIMPLE 压缩水平和垂直方向,只保存对角线方向的元素。例如矩形轮廓只需要4个点来保存信息。
其他的参数自行去官网的文档查阅即可。
结果处理
//result processing//!!!如果有多个目标,需要表里整个pointsVectorMatOfPoint cntMatOfPoint = pointsVector.get(0);Rect rect = Imgproc.boundingRect(cntMatOfPoint);int x = rect.x;int y = rect.y;int w = rect.width;int h = rect.height;
由于我测试的只有一个待检测物体,所以只取了第0个。
这样就得到了矩形轮廓。
轮廓绘制
将目标用红色矩形圈起来。如果想得到坐标,就直接通过x,y,w,h计算就行。
//Draw the rectangle outlineImgproc.rectangle(srcImgMat, new Point(x,y), new Point(x+w, y+h) , new Scalar(0,0,255));;String window_name = "show";HighGui.imshow(window_name,desImgMat);HighGui.imshow(window_name, srcImgMat);HighGui.waitKey(1);
Java 使用OpenCV进行颜色识别相关推荐
- Java借助OpenCV实现人脸识别登录完整示例
Java借助OpenCV实现人脸识别登录完整示例 OpenCV 效果预览 概述 下载与安装 目录说明 OpenCV的基本使用 项目集成 图片人脸检测 人脸对比相似度 识别视频中的人脸 摄像头识别人脸 ...
- Opencv之颜色识别
用Opencv之颜色识别 1.以下是我的基本流程: 读入图像 图像转成HSV 高斯滤波 筛选需要识别的颜色 腐蚀操作 找出轮廓 画出轮廓 接下来是我的总代码: import cv2 import nu ...
- OpenCV形状颜色识别Java,Android
纯java代码实现安卓的CV识别图形形状颜色 半年前开的帖,一直在忙 回来更新下. cv环境已经没有了,图就用以前的吧,代码我贴出来,凭记忆解释一下,算法实现的,我会说明逻辑 首先,环境是OpenCV ...
- Java使用OpenCV实现人脸识别
通过OpenCV实现人脸识别,包括图片,视频,摄像头中人脸识别. 首先看一下效果(在网上随便找的一张图片): 下面开始说一下如何实现的: 第一步: 需要安装OpenCV 下载链接:https://o ...
- opencv做颜色识别(python)
使用Raspberry摄像头抓图然后进行颜色识别. #!/usr/bin/python # -*- coding: UTF-8 -*- import sys import time from pica ...
- 基于Opencv的颜色识别
彩色模型 数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型.而HSV模型更符合人描 ...
- 图像识别——(java使用opencv答题卡识别)
具体算法实现:具体算法实现--opencvhttps://blog.csdn.net/qq_39246466/article/details/123819795 1.安装: 配置linux或windo ...
- android opencv颜色识别,OpenCV学习——颜色识别的简单应用(一)
第1步:获取到桌球台的图像信息 需要获取桌面固定区域的实时图像(这里为了方便,直接截取了一张图片) 第2步:识别出球杆和白球 创建滑条from cv2 import cv2 import numpy ...
- 【Opencv小项目 1】Opencv实现简单颜色识别
参考 Opencv简单颜色识别 Youtube教学视频 BGR HSV颜色模型 步骤 一. BGR 和 HSV 颜色模型 BGR Model BGR模型表示三种颜色通道:红.绿.蓝,采用BGR模型的图 ...
- java调起本地摄像头,利用openCV进行人脸识别(一)
嗨咯,又好久没有更新了.今天写个前阵子做的人脸识别程序.该程序客户端基于Jave JFrame 客户端的主要作用是,调用电脑的摄像头(我的直接调用笔记本摄像头),然后回显摄像头录取的信息,再利用ope ...
最新文章
- ABAP 获取登陆者的IP地址和主机名
- Android Studio 插件开发详解三:翻译插件实战
- mac安装sudo pip install MySQL-python报错EnvironmentError: mysql_config not found解决方法
- Android数据库框架-----ORMLite 的基本用法
- blender下载_下载此Blender Hotkey备忘单
- 【英语学习】【Daily English】U14 Transportation L01There will be a car exhibition next month
- 滴滴App突发Bug:滴滴一下,千元出发
- Bailian4034 选择客栈【序列处理】
- 20145201 《Java程序设计》第六周学习总结
- 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课0.19节使用画笔
- html怎么加圆圈,圆圈1怎么打 word怎么打一个圈里面加数字1
- 烽火路由路虚拟服务器,netcore路由设置烽火
- piwik阅读(整体结构)
- JAVA中如何解决超卖,Redis解决库存超卖问题实例讲解
- 防火墙第三天——恶意软件、反病毒技术。。。
- 黑色曼陀罗的宿命,无尽的结束,留下伤痛与悲残
- 【GPS - NMEA-0183协议】
- 基于FPGA的简易 DDS 信号发生器的设计
- 网上在线培训平台哪家好?
- 趣学数据结构 代码 自用