c++ - 代码背后的逻辑

标签 c++

这是来自 opencv hough lines,任何人都可以解释一下,在将它更改为 cartesian 之后 为什么他们添加了 a+1000,-b*1000

#include <cv.h>
#include <highgui.h>
#include <math.h>

int main(int argc, char** argv)
{
    IplImage* src;
    if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0)
    {
        IplImage* dst = cvCreateImage( cvGetSize(src), 8, 1 );
        IplImage* color_dst = cvCreateImage( cvGetSize(src), 8, 3 );
        CvMemStorage* storage = cvCreateMemStorage(0);
        CvSeq* lines = 0;
        int i;
        cvCanny( src, dst, 50, 200, 3 );
        cvCvtColor( dst, color_dst, CV_GRAY2BGR );
#if 1
        lines = cvHoughLines2( dst,
                               storage,
                               CV_HOUGH_STANDARD,
                               1,
                               CV_PI/180,
                               100,
                               0,
                               0 );

        for( i = 0; i < MIN(lines->total,100); i++ )
        {
            float* line = (float*)cvGetSeqElem(lines,i);
            float rho = line[0];
            float theta = line[1];
            CvPoint pt1, pt2;
            double a = cos(theta), b = sin(theta);
            double x0 = a*rho, y0 = b*rho;
            pt1.x = cvRound(x0 + 1000*(-b));
            pt1.y = cvRound(y0 + 1000*(a));
            pt2.x = cvRound(x0 - 1000*(-b));
            pt2.y = cvRound(y0 - 1000*(a));
            cvLine( color_dst, pt1, pt2, CV_RGB(255,0,0), 3, 8 );
        }

最佳答案

Cos 和 Sin 从 -1 到 +1,所以 Hough 累加器空间的原点在 0,0。

假设您的显示器具有正尺寸,将绘图的中心放在屏幕中间会很方便。

关于c++ - 代码背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205511/

相关文章:

c++ - Linux Manjaro 上的 Visual Studio 代码 C++ : IncludePath issue

c++ - FreeType2 - 字体较小

c++如何将指针分配给二叉树中的父节点

C++ 从 CreateProcess() 获取 UTF-8 输出

c++ - 重温 makefile 和 header 依赖项

c++ - OpenCV FaceRecognition 问题 - 它几乎总是匹配图像

c++ - COM API - 无法为指针参数传递 "NULL"

c++ - 静态库 - 调试还是发布?

c++ - 你能转换 sizeof 的结果吗

c++ - 排序 vector 以将偶数和奇数 fork