如何实现视觉识别颜色

article/2025/8/26 21:55:01

1. 功能说明

       通过摄像头识别特定颜色(红、绿、蓝)。摄像头采集图像信息并通过WiFi将信息传递给PC端,然后PC端根据比例判断出目标颜色在色盘上的所属颜色后,指针便会指向对应颜色。

红、绿、蓝-色块

 2. 电子硬件

    本实验中采用了以下硬件:

主控板

Basra主控板(兼容Arduino Uno)

扩展板

Bigfish2.1扩展板

电池7.4V锂电池
通信2510通信转接板
WiFi路由器

其它

摄像头

配置OpenCV的Visual Studio 2015.net环境的计算机一台

3. 功能实现

工作原理:

      ① 摄像头采集图像信息;

      ② 通过WiFi将信息传递给PC端(VS2015配置的OpenCV环境);

      ③ 在PC端修改红色色域范围,用于判断摄像范围内的红色像素;

采用HSV颜色模型

      ④ 计算检测在显示的摄像范围内的红色像素区域所占比例=红色像素范围/显示的摄像范围;

      ⑤ 根据比例判断目标颜色在色盘上所属颜色;

      ⑥ 指针指向对应颜色。

3.1硬件连接

      将摄像头与路由器连接,启动路由器,将PC连接到路由器的WIFI网络。

      本实验不需要用到主控板作为下位机,可直接通过WiFi将图像信号传递给PC端,所以无需下位机编程。

主控板与WiFi正常连线,给WiFi路由器模块通电。

接线说明:

      ① 将2510通信转接板连接到扩展板的扩展坞上面;

      ② 找到1根USB线,一端连接到2510通信转接板接口上,另一端连接到WiFi路由器USB接口上;

      ③ 将摄像头线连接到WiFi路由器接口上。

3.2示例程序

      下面提供一个可以进行3个颜色(红、绿、蓝)识别的参考例程(MainWindow.xaml.cs):

using System;using System.IO;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using System.Windows.Media.Animation;using System.Threading;using OpenCvSharp;using System.Drawing;using System.Drawing.Imaging;namespace Color_Detect{/// <summary>/// Color_Detect/// </summary>public partial class MainWindow : System.Windows.Window{/** 指针角度对应各颜色* 25 -> 红色* 90 -> 绿色* 150 -> 蓝色*/int ANGLE_RED = 0;int ANGLE_GREEN = 0;int ANGLE_BLUE = 0;//各颜色像素所占窗口的比例double numOfred = 0.0;double numOfgreen = 0.0;double numOfblue = 0.0;//创建视频图像实例VideoCapture capture = new VideoCapture("http://192.168.8.1:8083/?action=stream");Mat frame = new Mat();   //存储视频每一帧图像像素Mat resultColor = new Mat(); //存储检测后的颜色像素//视频显示切换变量Boolean isChange = false;public MainWindow(){InitializeComponent();}private void Window_Loaded(object sender, RoutedEventArgs e){ANGLE_RED = 25;ANGLE_GREEN = 90;ANGLE_BLUE = 150;}//颜色指示动画函数int angelCurrent = 0;private void ColorIndicate(int where) {RotateTransform rt = new RotateTransform();rt.CenterX = 150;rt.CenterY = 185;this.indicatorPin.RenderTransform = rt;double timeAnimation = Math.Abs(angelCurrent - where) * 5;DoubleAnimation da = new DoubleAnimation(angelCurrent, where, new Duration(TimeSpan.FromMilliseconds(timeAnimation)));da.AccelerationRatio = 0.8;rt.BeginAnimation(RotateTransform.AngleProperty, da);switch (where) {case 25:colorDisplay.Content = "红色";break;case 90:colorDisplay.Content = "绿色";break;case 150:colorDisplay.Content = "蓝色";break;default:colorDisplay.Content = "颜色指示";break;}angelCurrent = where;}/// <summary>/// MatToBitmap(Mat image)/// </summary>public static Bitmap MatToBitmap(Mat image){return OpenCvSharp.Extensions.BitmapConverter.ToBitmap(image);}/// <summary>/// BitmapToBitmapImage(System.Drawing.Bitmap bitmap)/// </summary>public static BitmapImage BitmapToBitmapImage(Bitmap bitmap){using (MemoryStream stream = new MemoryStream()){bitmap.Save(stream, ImageFormat.Png); //格式选Bmp时,不带透明度stream.Position = 0;BitmapImage result = new BitmapImage();result.BeginInit();// According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed."// Force the bitmap to load right now so we can dispose the stream.result.CacheOption = BitmapCacheOption.OnLoad;result.StreamSource = stream;result.EndInit();result.Freeze();return result;}}//颜色检测函数private void filterColor() {Mat hsvImage = frame.CvtColor(ColorConversionCodes.BGR2HSV);resultColor = new Mat(hsvImage.Rows, hsvImage.Cols, MatType.CV_8UC3, Scalar.All(255));double H = 0.0, S = 0.0, V = 0.0;float area = (float)(hsvImage.Rows * hsvImage.Cols);float rateOfred = 0, rateOfgreen = 0, rateOfblue = 0;for (int i = 0; i < hsvImage.Rows; i++) {for (int j = 0; j < hsvImage.Cols; j++) {H = hsvImage.Get<Vec3b>(i, j)[0];S = hsvImage.Get<Vec3b>(i, j)[1];V = hsvImage.Get<Vec3b>(i, j)[2];var color = frame.Get<Vec3b>(i, j);if (((H >= 0 && H <= 10) || (H >= 125 && H <= 180)) && S >= 43 && V >= 46) //红色像素所在hsv范围{resultColor.Set<Vec3b>(i, j, color);numOfred++;}else if ((H >= 33 && H <= 83) && S >= 43 && V >= 46) //绿色像素所在hsv范围{resultColor.Set<Vec3b>(i, j, color);numOfgreen++;}else if ((H > 100 && H < 124) && S >= 43 && V >= 46) //蓝色像素所在hsv范围{resultColor.Set<Vec3b>(i, j, color);numOfblue++;}}}rateOfred = (float)(numOfred) / area * 100;rateOfgreen = (float)(numOfgreen) / area * 100;rateOfblue = (float)(numOfblue) / area * 100;if (rateOfred > 85){ColorIndicate(ANGLE_RED);}else if (rateOfgreen > 85){ColorIndicate(ANGLE_GREEN);}else if (rateOfblue > 85) {ColorIndicate(ANGLE_BLUE);}numOfred = 0;numOfgreen = 0;numOfblue = 0;}//视频显示函数private void ThreadCapShow(){while (true){try{capture.Read(frame); // same as cvQueryFrameif (frame.Empty())break;this.Dispatcher.Invoke(new Action(delegate{if (isChange){filterColor();originImage.Source = BitmapToBitmapImage(MatToBitmap(resultColor));resultColor = null;}else {originImage.Source = BitmapToBitmapImage(MatToBitmap(frame));}}));//Cv2.WaitKey(100);//bitimg = null;}catch { }}}//加载视频private void loadBtn_Click(object sender, RoutedEventArgs e){if (originImage.Source != null) return;Thread m_thread = new Thread(ThreadCapShow);m_thread.IsBackground = true;m_thread.Start();}//切换视频显示,显示检测结果private void changeBtn_Click(object sender, RoutedEventArgs e){if (!isChange){isChange = true;changeBtn.Content = "返回";}else {isChange = false;changeBtn.Content = "切换";//指针角度归零ColorIndicate(0);}}}}

程序设定的颜色为红色、绿色、蓝色,可以使用色卡或者特定颜色的物体来检测。

注意:程序中的比例值设置为85%时,可以进行三种颜色的识别判断,建议测试的色块距离小一些,识别效果会更好。

4. 资料内容

识别颜色-例程源代码

资料内容详见 如何实现视觉识别-识别颜色


http://chatgpt.dhexx.cn/article/V8E1jG5T.shtml

相关文章

Halcon——颜色识别提取

文章目录 前言一、颜色识别原理二、颜色识别为什么将其转换至HSV颜色空间三、源代码写在最后 前言 【Halcon】颜色识别提取 这里以嘉庚建筑风格为例~ 一、颜色识别原理 载入图像后&#xff0c;将其转换至HSV颜色空间&#xff0c;通过判断每个像素是否在所选取的范围内&…

颜色识别、轮廓识别-树莓派 Opencv-基于Python学习记录DAY-4

学习颜色识别之前先介绍一下新认识的图像格式HSV&#xff1a; 色调H 用角度度量&#xff0c;取值范围为0&#xff5e;360&#xff0c;从红色开始按逆时针方向计算&#xff0c;红色为0&#xff0c;绿色为120,蓝色为240。它们的补色是&#xff1a;黄色为60&#xff0c;青色为18…

opencv--颜色识别

目录 一、主要函数介绍 二、颜色识别 三、其他相关函数介绍 1. cv2.resize 2. np.array(x,dtype) 3. cv2.inRange() 4. cv2.imshow() 5.cv2. waitKey() 四、掩膜 一、主要函数介绍 通常&#xff0c;相机在RGB颜色模式下工作&#xff0c;但这种模式受到光线的影响较大&am…

颜色识别OpenCV

下面有多种颜色识别方法&#xff0c;可根据需要进行选择 ①colorList.py&#xff08;颜色库&#xff09; import numpy as np import collectionsdef getColorList():dict collections.defaultdict(list)# blacklower_black np.array([0, 0, 0])upper_black np.array([180…

SPSSAU统计分析软件,一键输出三线表格式分析结果

SPSSAU最近和一位朋友聊天&#xff0c;她在写论文&#xff0c;说到自己用SPSS软件对问卷数据做统计分析&#xff0c;做完之后分析结果有了&#xff0c;拿给导师看&#xff0c;但她们导师说&#xff0c;论文中的表格必须是三线表格式&#xff0c;然后她就得要自己手动制作三线表…

SPSS软件的数据分析与GDP和人口老龄化的预测

目录 前言 问题二模型的建立与求解 1.2.1 ARIMA时间序列模型的建立与求解 平稳性检验 的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​对于的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​ 前言 SPSS软件的数据分析与GDP和…

数据分析与挖掘———SPSS Moderler

数据分析与挖掘———SPSS Moderler 一、Modeler给概述 1、SPSS Modeler基本认识 IBM SPSS Modeler是一组数据挖掘工具&#xff0c;通过这些工具可以采用商业技术快速建立预测性模型&#xff0c;并将其应用于商业活动&#xff0c;从而改进决策过程。 SPSS Modeler提供了各种…

用SPSS做数据分析(1)

写在前面: 爬虫今天停更一天,今天是周六,今天要把最近网课学习SPSS课程做个总结和回顾,明天继续更新爬虫的内容,今天这篇文章主要是SPSS中的数据管理,一些关于数据的简单操作,是属于SPSS中比较基础的内容,希望看完博客能动手亲自实践一下,会有奇效 文章目录 写在前面:SPSS数据…

利用SPSS做数据分析①(了解SPSS)

话不多说&#xff0c;上才艺&#xff0c;BGM&#xff0c;BGM&#xff0c;BGMBGM。。。哈哈哈哈 不闹了&#xff0c;接下来让我们一起认识一个非常好用的数据分析工具&#xff1a;SPSS 1、SPSS是什么&#xff1f; SPSS是广大统计爱好者和数据分析师最熟悉的名字&#xff0c;它…

如何用SPSS进行数据分析?

1.什么是SPSS SPSS是社会统计科学软件包的简称&#xff0c; 其官方全称为IBM SPSS Statistics。SPSS软件包最初由SPSS Inc.于1968年推出&#xff0c;于2009年被IBM收购&#xff0c;主要运用于各领域数据的管理和统计分析。作为世界社会科学数据分析的标准&#xff0c;SPSS操作…

数据分析5大软件大PK:Python、Excel、R、SAS、SPSS你最爱哪个?

转自 中国统计网 本文为转载分享&#xff0c;若侵权请联系后台删除 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一&#xff0c;是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个…

SPSS:数据分析

目录 1、数据采集 2、数据是否服从正态分布 3、T检验&#xff08;T Test&#xff09; 4、方差分析&#xff08;ANOVA&#xff09; 5、卡方检验&#xff08;Chi-square Test&#xff09; 6、灰色关联度分析&#xff08;Grey Relation Analysis&#xff0c;GRA&#xff09;…

[SPSS] SPSS统计分析软件简介

SPSS的英文缩写来源于以下两个 ① Statistical Package for Social Science(社会科学统计软件包) ② Statistical Product and Service Solutions(统计产品与服务解决方案) SPSS是一种专业的统计分析软件。为用户提供了直观的图形化菜单界面&#xff0c;用户的数据管理和统计…

SPSS软件介绍

SPSS软件界面描述 IBM SPSS是目前常用的一种统计分析软件&#xff0c;SPSS&#xff08;Statistical Product and Service Solutions&#xff09;是统计产品和服务解决方案软件&#xff0c;操作简单&#xff0c;无需写代码&#xff0c;只需确定要分析的数据及之间的因变、自变关…

数据分析软件及spss简单操作

数据分析软件介绍 SPSS统计软件 SPSS是英文Statistical package for the social science 的缩写&#xff0c;翻译成汉语是社会学统计程序包&#xff0c;20世纪60年代末由美国斯坦福大学的三位研究生研制&#xff0c;1975年在芝加哥组建SPSS总部。SPSS系统特点是操作比较方…

SPSS数据分析全套教程(1)——SPSS概览

SPSS数据分析全套教程&#xff08;1&#xff09;——SPSS概览 什么是SPSS&#xff1f; 社会科学统计软件包&#xff08;Statistical Package for the Social Science&#xff0c;SPSS&#xff09;是世界著名的统计分析软件之一。 经近40年的发展&#xff0c;在全球已拥有大量…

初识数据分析利器SPSS

今天这篇文章小白带大家了解一款做数据分析的利器—SPSS。 不知道大家有没有了解过SPSS&#xff0c;如果了解过甚至使用过的同学又对这款工具有多深的认识呢&#xff1f; SPSS是一款常用的数据分析工具&#xff0c;不管是在学校课程、学术论文还是数据分析工作中都是非常常见…

JLink的RTT使用

前言&#xff1a;什么是RTT? RTT&#xff08; Real Time Terminal&#xff09;是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息&#xff0c;由于其高速的特性&#…

使用RTT代替UART,把你的JLink变成串口调试助手~

摘要&#xff1a;不知道大家在单片机开发中是如何打印调试信息的&#xff0c;大多数应该是用串口调试打印吧&#xff0c;在大多数的情况下&#xff0c;一般在制板和写代码时都会预留串口1做为调试打印用。 但是在实际开发如果没有预留串口怎么办&#xff1f;其实我们的下载器是…

TCP RTT与TCP RTO关系详解

本文目录 1&#xff0c;TCP的RTT和TCP的RTO的定义1.1&#xff0c;什么是TCP的RTT1.2&#xff0c;什么是TCP的RTO 2&#xff0c;TCP的当前RTT和RTO的计算2.1&#xff0c;开始讲RTT计算算法前&#xff0c;我们先理解一下TCP里对RTT进行采样的流程2.2&#xff0c;最初始的TCP RTT和…