文章目录

  • Java使用OpenCV进行颜色识别
    • 流程
    • 详细步骤
      • 库加载
      • 图像读取
      • 色域转换
      • 直方图均衡化
      • 输出二值图像
      • 处理噪点
      • 轮廓识别
      • 结果处理
      • 轮廓绘制

Java使用OpenCV进行颜色识别

流程

  1. 库加载
  2. 图像读取
  3. 色域转换
  4. 直方图均衡化(选用)
  5. 输出二值图像
  6. 噪点处理
  7. 轮廓识别
  8. 结果解析

详细步骤

库加载

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进行颜色识别相关推荐

  1. Java借助OpenCV实现人脸识别登录完整示例

    Java借助OpenCV实现人脸识别登录完整示例 OpenCV 效果预览 概述 下载与安装 目录说明 OpenCV的基本使用 项目集成 图片人脸检测 人脸对比相似度 识别视频中的人脸 摄像头识别人脸 ...

  2. Opencv之颜色识别

    用Opencv之颜色识别 1.以下是我的基本流程: 读入图像 图像转成HSV 高斯滤波 筛选需要识别的颜色 腐蚀操作 找出轮廓 画出轮廓 接下来是我的总代码: import cv2 import nu ...

  3. OpenCV形状颜色识别Java,Android

    纯java代码实现安卓的CV识别图形形状颜色 半年前开的帖,一直在忙 回来更新下. cv环境已经没有了,图就用以前的吧,代码我贴出来,凭记忆解释一下,算法实现的,我会说明逻辑 首先,环境是OpenCV ...

  4. Java使用OpenCV实现人脸识别

    通过OpenCV实现人脸识别,包括图片,视频,摄像头中人脸识别. 首先看一下效果(在网上随便找的一张图片): 下面开始说一下如何实现的: 第一步:  需要安装OpenCV 下载链接:https://o ...

  5. opencv做颜色识别(python)

    使用Raspberry摄像头抓图然后进行颜色识别. #!/usr/bin/python # -*- coding: UTF-8 -*- import sys import time from pica ...

  6. 基于Opencv的颜色识别

    彩色模型   数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型.而HSV模型更符合人描 ...

  7. 图像识别——(java使用opencv答题卡识别)

    具体算法实现:具体算法实现--opencvhttps://blog.csdn.net/qq_39246466/article/details/123819795 1.安装: 配置linux或windo ...

  8. android opencv颜色识别,OpenCV学习——颜色识别的简单应用(一)

    第1步:获取到桌球台的图像信息 需要获取桌面固定区域的实时图像(这里为了方便,直接截取了一张图片) 第2步:识别出球杆和白球 创建滑条from cv2 import cv2 import numpy ...

  9. 【Opencv小项目 1】Opencv实现简单颜色识别

    参考 Opencv简单颜色识别 Youtube教学视频 BGR HSV颜色模型 步骤 一. BGR 和 HSV 颜色模型 BGR Model BGR模型表示三种颜色通道:红.绿.蓝,采用BGR模型的图 ...

  10. java调起本地摄像头,利用openCV进行人脸识别(一)

    嗨咯,又好久没有更新了.今天写个前阵子做的人脸识别程序.该程序客户端基于Jave JFrame 客户端的主要作用是,调用电脑的摄像头(我的直接调用笔记本摄像头),然后回显摄像头录取的信息,再利用ope ...

最新文章

  1. ABAP 获取登陆者的IP地址和主机名
  2. Android Studio 插件开发详解三:翻译插件实战
  3. mac安装sudo pip install MySQL-python报错EnvironmentError: mysql_config not found解决方法
  4. Android数据库框架-----ORMLite 的基本用法
  5. blender下载_下载此Blender Hotkey备忘单
  6. 【英语学习】【Daily English】U14 Transportation L01There will be a car exhibition next month
  7. 滴滴App突发Bug:滴滴一下,千元出发
  8. Bailian4034 选择客栈【序列处理】
  9. 20145201 《Java程序设计》第六周学习总结
  10. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课0.19节使用画笔
  11. html怎么加圆圈,圆圈1怎么打 word怎么打一个圈里面加数字1
  12. 烽火路由路虚拟服务器,netcore路由设置烽火
  13. piwik阅读(整体结构)
  14. JAVA中如何解决超卖,Redis解决库存超卖问题实例讲解
  15. 防火墙第三天——恶意软件、反病毒技术。。。
  16. 黑色曼陀罗的宿命,无尽的结束,留下伤痛与悲残
  17. 【GPS - NMEA-0183协议】
  18. 基于FPGA的简易 DDS 信号发生器的设计
  19. 网上在线培训平台哪家好?
  20. 趣学数据结构 代码 自用

热门文章

  1. 蛋白质组学数据分析实践
  2. 期货专业术语中英文对照
  3. cad计算机绘图实操视频,CAD电脑绘图教程视频
  4. Python读取NC格式数据绘制水汽通量等值线和和流场
  5. 我们是如何认识这个世界的呢
  6. python 解压zip rar 7z文件
  7. JAVAFX输入法的实现
  8. java中system.in怎么用
  9. 占内存最小的浏览器:360安全浏览器超速版推荐
  10. oppoa5降级教程_OPPO A5官方原厂固件rom刷机包_全量系统降级包回退包下载A.14版