• 大小: 7KB
    文件类型: .cpp
    金币: 2
    下载: 0 次
    发布日期: 2024-02-04
  • 语言: C/C++
  • 标签: opencv  魔方  颜色  

资源简介

用VS2015写的C++程序,运用opencv实现识别魔方的各个块的颜色。

资源截图

代码片段和文件信息

#include 
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“
#include
#include


using namespace cv;
using namespace std;

//定义结构体
typedef struct block { //魔方每一块包含位置和颜色,规定1:白 2:红 3:绿 4:黄 5:橙 6:蓝
Point Loc;
int color;
}block;
typedef struct Plane { //每一个面包含九块,从左往右,从上往下分别为1-9 色块大小,200x200(将原图缩小五倍后)
block one;
block two;
block three;
block four;
block five;
block six;
block seven;
block eight;
block nine;
}Plane;

//全局变量
Plane Front Back Left Right Up Down; //定义六个面

//子函数
Plane find_block_Loc(Mat src);
void panduan_color(Mat src Plane *mian int c); //判断每一个块的颜色输入经过处理的图,需要判断的面,需要判断的颜色
void identify_colors(Mat src Plane * m);

int main()
{

Mat imgOriginal imgOriginal_quarter;
imgOriginal = imread(“魔方.jpg“ 1);

resize(imgOriginal imgOriginal_quarter Size(imgOriginal.cols / 5 imgOriginal.rows / 5) 0 0 INTER_AREA); //尺寸缩小到原图1/5
imshow(“show“ imgOriginal_quarter);
waitKey(600);
Front = find_block_Loc(imgOriginal_quarter);
identify_colors(imgOriginal_quarter &Front);
circle(imgOriginal_quarter Front.five.Loc 8 Scalar(255 255 255));
imshow(“show1“ imgOriginal_quarter);
waitKey(60000);
return 0;
}


void identify_colors(Mat src Plane * mian) //找到每一面的每一个块的颜色
{
Mat imgHSV;
vector hsvSplit;
cvtColor(src imgHSV COLOR_BGR2HSV); //把图像从BGR转换到HSV,因为我们读取的是彩色图,直方图均衡化需要在HSV空间做

split(imgHSV hsvSplit); //用split函数进行通道分离
equalizeHist(hsvSplit[2] hsvSplit[2]); //直方均衡化,增强图像对比度
merge(hsvSplit imgHSV); //split的逆操作,组合成多通道,输出对比度增强后的图

Mat imgThresholded;
Mat element = getStructuringElement(MORPH_RECT Size(5 5));
/*判断九个块是否有 **红色** ,如果有,在color里存入2*/
inRange(imgHSV Scalar(165 20 20) Scalar(180 255 255) imgThresholded); //把HSV在设定阈值内的颜色区域取成白色,其他区域取成黑色
morphologyEx(imgThresholded imgThresholded MORPH_OPEN element);  //开操作 (去除一些噪点)
morphologyEx(imgThresholded imgThresholded MORPH_CLOSE element);     //闭操作 (连接一些连通域)
panduan_color(imgThresholded mian 2);

/*判断九个块是否有 **橙色** ,如果有,在color里存入5*/
inRange(imgHSV Scalar(0 40 40) Scalar(20 255 255) imgThresholded);
morphologyEx(imgThresholded imgThresholded MORPH_OPEN element);
morphologyEx(imgThresholded imgThresholded MORPH_CLOSE element);
panduan_color(imgThresholded mian 5);

/*判断九个块是否有 **黄色** ,如果有,在color里存入4*/
inRange(imgHSV Scalar(26 40 40) Scalar(45 255 255) imgThresholded);
morphologyEx(imgThresholded imgThresholded MORPH_OPEN element);
morphologyEx(imgThresholded imgThresholded MORPH_CLOSE element);
panduan_color(imgThresholded mian 4);

/*判断九个块是否有 **绿色**,如果有,在color里存入3*/
inRange(imgHSV Scalar(50 40 40) Scalar(95 255 255) imgThresholded);
morphologyEx(imgThresholded imgThresholded MORPH_OPEN element);
morphologyEx(imgThresholded imgThresholded MORPH_CLOSE element);
panduan_color(imgThresholded mian 3);

/*判

评论

共有 条评论