首先魔方要买那种磨砂的减少反光的影响。其实也就是当光线太亮或者太暗色彩分量就变小了。
然后通过方法找到魔方的边界,然后将这个正方形部分截取出来处理。
后面就是一个面一个面的处理,将分成33共9个块,就是对应着9个色块。
下面就是对每个块的处理,去除其中的非色彩分量,就是这部分不参与后面的计算。
我曾经用过一个方法,就是通过颜色的值来区分,因为魔方有六种颜色。别的颜色基本没什么问题,只有红色与橙色有问题,由于魔方生产的时候,色彩并不是标准的。所以是不能用固定阈值来处理,也不能用图像的模版来处理,因为那样模版要做的太多了。
个人觉得的办法是,整个魔方所有色块一起处理,先处理其他的颜色,最后再处理红色与橙色,可能会更精确些。就是越靠近红色分量的9个色块作为红色,越靠近橙色分量的9个色块作为橙色。
1、数字图像:
数字图像,又称为数码图像或数位图像,是二维图像用有限数字数值像素的表示。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。
2、数字图像处理包括内容:
图像数字化;图像变换;图像增强;图像恢复;图像压缩编码;图像分割;图像分析与描述;图像的识别分类。
3、数字图像处理系统包括部分:
输入(采集);存储;输出(显示);通信;图像处理与分析。
4、从“模拟图像”到“数字图像”要经过的步骤有:
图像信息的获取;图像信息的存储;图像信息处理;图像信息的传输;图像信息的输出和显示。
5、数字图像1600x1200什么意思?灰度一般取值范围0~255,其含义是什么?
数字图像1600x1200表示空间分辨率为1600x1200像素;灰度范围0~255指示图像的256阶灰阶,就是通过不同程度的灰色来来表示图像的明暗关系,8bit的灰度分辨率。
#include <iostream>
#include <cvh>
#include "highguih"
#ifdef _DEBUG
#pragma comment(lib, "opencv_core245dlib")
#pragma comment(lib, "opencv_highgui245dlib")
#pragma comment(lib, "opencv_imgproc245dlib")
#else
#pragma comment(lib, "opencv_core245lib")
#pragma comment(lib, "opencv_highgui245lib")
#pragma comment(lib, "opencv_imgproc245lib")
#endif
int main()
{
cv::VideoCapture capture(0);
if (!captureisOpened())
return 0;
cv::Mat image, HSV, channels[3];
float threshold = 03;
while (captureread(image))
{
cv::cvtColor(image, HSV, CV_BGR2HSV);
cv::split(HSV, channels);
cv::threshold(channels[0], channels[1], 15, 1,CV_THRESH_BINARY_INV);
cv::threshold(channels[0], channels[0], 245, 1,CV_THRESH_BINARY);
channels[0] += channels[1];
cv::erode(channels[0], channels[0], cv::Mat::ones(3,3,CV_8UC1), cv::Point(1,1), 3);
cv::Scalar v = cv::sum(channels[0]);
int result = v[0] > channels[0]total() threshold;
std::cout << result << std::endl;
}
}
以上就是关于opencv摄像机捕捉魔方画面进行颜色识别的问题,如题。全部的内容,包括:opencv摄像机捕捉魔方画面进行颜色识别的问题,如题。、Opencv数字图像处理颜色识别问题_opencv颜色分割、opencv颜色识别代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)