資源簡介
用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);
/*判
評論
共有 條評論