opencv - 使用 Opencv 读取魔方的颜色

标签 opencv image-processing

我使用 OpenCV 编写了一个 C++ 程序,可以检测并突出显示实时视频中任何对象的边缘。但是现在我不知道如何从视频中检测到的许多边缘中提取立方体的四个角。所以我在这里寻求帮助。

这是我用作此项目指南的论文链接。 http://www.cs.ubc.ca/~andrejk/525project/525report.pdf 您可以在下面的链接中找到本文的程序代码。它是用 Python 编写的。 (我正在使用 C++,我不知道 Python) http://www.cs.ubc.ca/~andrejk/525project/cubefinder.py

根据该论文,下一步将是“使用自适应阈值进行边缘分割”。 我真的不明白。而且我也不知道如何提取立方体的角。

我使用的方法的简短摘要如下。 1. 来自网络摄像头的输入 2.应用拉普拉斯滤波器 3. 应用霍夫线变换。

我得到以下结果。

Result

代码

using namespace std;
using namespace cv;

Mat laplacianFilter(Mat image)
{
Mat hImage;

GaussianBlur(image,hImage,Size(3,3),0,0,BORDER_DEFAULT);
cvtColor(hImage,hImage,CV_RGB2GRAY);
Laplacian(hImage,hImage,CV_16SC1,3,1,0,BORDER_DEFAULT);
convertScaleAbs(hImage,hImage,1,0);

return hImage;
}

Mat hghTransform(Mat image, Mat &image2)
{
Mat lImage;

Canny(image,image,50,200,3);
cvtColor(image,lImage,CV_GRAY2BGR);

    vector<Vec4i> lines;
    HoughLinesP(image, lines, 1, CV_PI/180, 50, 50, 10 );
    for( size_t i = 0; i < lines.size(); i++ )
    {
        Vec4i l = lines[i];
        line( image2, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0,255,0), 3, CV_AA);
    }

return lImage;
}


int main()
{
int c;

VideoCapture cap(0);

Mat image;
Mat image2;

namedWindow("hghtransform");
namedWindow("laplacianfilter");
namedWindow("cannyOutput");

while(1)
{
    cap>>image;
    cap>>image2;

    //Output
    imshow("laplacianfilter",laplacianFilter(image));
    imshow("cannyOutput",hghTransform(laplacianFilter(image),image2));
    imshow("hghtransform",image2);

    c=waitKey(33);

    if(c==27)
        return 0;

}

return 0;
}

最佳答案

自适应阈值将为您提供清晰的边缘线,使您能够正确获得 9 个魔方边。

你可以在这里看到全局阈值和自适应阈值的比较:
这里:https://sites.google.com/site/qingzongtseng/adaptivethreshold

原图:
enter image description here

全局阈值:
enter image description here

自适应阈值:
enter image description here

对于角落,我不确定它是否在论文中有说明,但我会这样做:
==> 查找类似 1 的区域, 2 , 3 , 4对于 upper-left , upper-right , lower-left , 和 lower-right分别转角
==> 使用模板匹配算法。
enter image description here

希望对您有所帮助。

注意:您可能希望背景中的噪音较少。 =)

关于opencv - 使用 Opencv 读取魔方的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563751/

相关文章:

python-2.7 - Opencv Python 2.7 中的轮廓检测

algorithm - 以编程方式以抽象方式无间隙地排列矩形 UI 对象

visual-studio - 在 Windows 10 上针对 Windows XP 构建 OpenCV 3.4.1

c++ - OpenCV Blob 检测 : separate close blobs

c++ - 跟踪第 3 方库中的段错误:cv::ImageCodecInitializer 析构函数崩溃

image - 背景图像的粒子分割

c# - 图像渲染技术 - 用于向现有照片添加逼真的文本

image - 检测植物图片中的所有分支

python - 在图像opencv python中找到单词中每个字符的中心坐标

node.js - 使用OpenCV从X射线图像进行3D重建所需的信息