Skip to content

RM视觉组考核项目(识别红、蓝色块)

Notifications You must be signed in to change notification settings

T-Xingchen/color_detect

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

颜色识别实验报告 一、简介 在正式比赛中,参赛队伍将会被分为红蓝阵营,故需要实现对颜色的识别来分辨敌我。 二、实验内容 传入指定大小图片(例如 1010 或者 2020),判断图片区域颜色(以 肉眼感官为准),对其进行颜色判断(主要可分为红色、蓝色、杂色),尽可能优 化提高精确度。 三、 实验要求 使用 git 和 github,要求记录实验中所有代码和过程。 最终形成一份实验报告,不需太多文字叙述,体现主要解决方案、自我思考、不 足之处(如果有的话)、以及程序运行结果等,并附上 github 地址,如有参考文 献,将链接一并附上。 四、实验思路 我们平时看到的彩图在计算机中是一个三维矩阵,每一点上的三个值分别对应RGB三原色值。通过改变三原色中RGB所占比例可以合成出任意颜色,但是除了RGB颜色空间,还存在HSV颜色空间,在识别颜色的时候我们需要在HSV空间进行。对于图像而言,识别相应的颜色在RGB空间、HSV空间或者其它颜色空间都是可行的。之所以选择HSV,是因为H代表的色调基本上可以确定某种颜色,再结合饱和度和亮度信息判断大于某一个阈值。而RGB由三个分量构成,需要判断每种分量的贡献比例,因此在HSV空间中更易于划分颜色。下图是在HSV空间中不同颜色区域。

五、实验结果 检测蓝色方程序运行结果: result

六、源代码及github地址 #include #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp"

using namespace cv; using namespace std;

int main( int argc, char** argv ) { namedWindow("Control", CV_WINDOW_AUTOSIZE); //创建名为“control”的窗口

int iLowH = 100;
int iHighH = 140;

int iLowS = 90;
int iHighS = 255;

int iLowV = 90;
int iHighV = 255;

//在“control”窗口中创建滑动条
cvCreateTrackbar("LowH", "Control", &iLowH, 179); 	//H (0 - 179)
cvCreateTrackbar("HighH", "Control", &iHighH, 179);

cvCreateTrackbar("LowS", "Control", &iLowS, 255); 		//S (0 - 255)
cvCreateTrackbar("HighS", "Control", &iHighS, 255);

cvCreateTrackbar("LowV", "Control", &iLowV, 255); 	//V (0 - 255)
cvCreateTrackbar("HighV", "Control", &iHighV, 255);
 Mat img=imread("robot.jpg");		//读入名为“robot.jpg”的图片
Size size=Size(400,400);
Mat imgOriginal=Mat(size,CV_32S);
resize(img,imgOriginal,size);		   //调整尺寸
while (true)
{
    Mat imgHSV;
    vector<Mat> hsvSplit;
    cvtColor(imgOriginal, imgHSV, COLOR_BGR2HSV); //将原图从GRB空间转换的HSV空间 
    //因为我们读取的是彩色图,直方图均衡化需要在HSV空间做
    split(imgHSV, hsvSplit);		//将imgHSV进行通道分离
    equalizeHist(hsvSplit[2],hsvSplit[2]);//直方图均衡化,增强对比度
    merge(hsvSplit,imgHSV);		//将分离后的通道合并
    Mat imgThresholded;

    inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //生成满足所要求颜色范围的二值化图像,所要检测的颜色区域为白色,其余为黑色。

    //开操作 (去除一些噪点)
    Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));// 函数会返回尺寸为5*5的矩形结构元素
    morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);// 先腐蚀后膨胀,放大裂缝和低密度区域,消除小物体,在平滑较大物体的边界时,不改变其面积

    //闭操作 (连接一些连通域)
    morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);// 先膨胀后腐蚀,排除小型黑洞,突触了比原图轮廓区域更暗的区域

    imshow("Thresholded Image", imgThresholded); 
    imshow("Original", imgOriginal); 
    char key = (char) waitKey(300);
    if(key == 27)
        break;
}
return 0;

}

GitHub地址:https://github.com/TianXingchen/ubiquitous-computing-machine/edit/master/README.md

About

RM视觉组考核项目(识别红、蓝色块)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published