资源简介
用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);
/*判
相关资源
- opencv版俄罗斯方块源码
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放
- 粒子滤波器+目标跟踪的C++实现,VS2
- 张平OpenCV算法精讲基于python和C++教材
- MFC Tab control 重绘便签边框和主框 背景
- 虹膜识别开源代码OSIRIS4.1基于opencv
- Sift特征点提取与匹配opencv库
- YCbCr、混合高斯以及YCbCg肤色检测模型
- 光流法代码
- MFC画圆自定义|位置|半径|边界和内部
- OpenCV打开摄像机显示在MFC窗口工程源
- 使用c++读取图像到二维矩阵
- 三维点云的圆柱面拟合
- MFC+OPENCV摄像机标定程序
- 基于特征脸的人脸识别MFC+OpenCV
- opencv图像处理MFC
- C++实现的基于内容的图像检索
- OPENCV人脸检测加角点检测并输出坐标
- FillHole.rar
- 道路提取算法 c++ opencv
- PCA代码实现详解
- opencv卡尔曼滤波
- SeamCarving opencv c++
- opencv prewitt边缘检测
- MFC中使用OpenCV显示选定文件夹中所有
- VC6.0的使用工具AddOpen插件、字体/颜色
- 车牌识别系统和车型识别系统源代码
- opencv 模糊C均值 c++
- 基于opencv的图像配准程序
- VC++直方图均衡化显示图像及直方图
评论
共有 条评论