转换OpenCv C++;Java代码 我试图用OpenCV HOWLIN算法检测图像中的线条,但问题是我在C++中发现的唯一教程,我设法把一些代码转换成java,但是有些线条太混乱了,下面是我原来的代码,转换成java < /p> Mat dst, cdst; Canny(src, dst, 50, 200, 3); cvtColor(dst, cdst, CV_GRAY2BGR); vector<Vec2f> lines; // detect lines HoughLines(dst, lines, 1, CV_PI/180, 150, 0, 0 ); // draw lines for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point 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)); line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA); } Mat-dst、cdst; Canny(src、dst、50、200、3); CVT颜色(dst、cdst、CV_GRAY2BGR); 矢量线; //探测线 HoughLines(dst,lines,1,CV_PI/180,150,0,0); //划线 对于(size_t i=0;i
这就是我到目前为止所做的转换OpenCv C++;Java代码 我试图用OpenCV HOWLIN算法检测图像中的线条,但问题是我在C++中发现的唯一教程,我设法把一些代码转换成java,但是有些线条太混乱了,下面是我原来的代码,转换成java < /p> Mat dst, cdst; Canny(src, dst, 50, 200, 3); cvtColor(dst, cdst, CV_GRAY2BGR); vector<Vec2f> lines; // detect lines HoughLines(dst, lines, 1, CV_PI/180, 150, 0, 0 ); // draw lines for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point 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)); line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA); } Mat-dst、cdst; Canny(src、dst、50、200、3); CVT颜色(dst、cdst、CV_GRAY2BGR); 矢量线; //探测线 HoughLines(dst,lines,1,CV_PI/180,150,0,0); //划线 对于(size_t i=0;i,java,c++,opencv,Java,C++,Opencv,这就是我到目前为止所做的 Mat dst, cdst; Imgproc.Canny(src, dst, 50, 200); // Imgproc.Canny(src, dst, 50, 200, 3); Imgproc.cvtColor(dst, cdst, Imgproc.COLOR_GRAY2BGRA); Vector<Vec2f> lines; // detect lines Imgproc.HoughLine
Mat dst, cdst;
Imgproc.Canny(src, dst, 50, 200);
// Imgproc.Canny(src, dst, 50, 200, 3);
Imgproc.cvtColor(dst, cdst, Imgproc.COLOR_GRAY2BGRA);
Vector<Vec2f> lines;
// detect lines
Imgproc.HoughLines(dst, lines, 1, Math.PI/180, 150, 0, 0 );
// draw lines
for( int i = 0; i < lines.size(); i++ )
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = Math.cos(theta), b = Math.sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = Math.round(x0 + 1000*(-b));
pt1.y = Math.round(y0 + 1000*(a));
pt2.x = Math.round(x0 - 1000*(-b));
pt2.y = Math.round(y0 - 1000*(a));
Imgproc.line( cdst, pt1, pt2, new Scalar(0,0,255), 3, Core.LINE_AA);
//Imgproc.line( cdst, pt1, pt2, new Scalar(0,0,255), 3, Core.LINE_AA);
}
Mat-dst、cdst;
Imgproc.Canny(src,dst,50,200);
//Imgproc.Canny(src,dst,50,200,3);
Imgproc.CVT颜色(dst、cdst、Imgproc.COLOR_GRAY2BGRA);
矢量线;
//探测线
Imgproc.HoughLines(dst,lines,1,Math.PI/180150,0,0);
//划线
对于(int i=0;i
我的问题开始于第3行
Imgproc.Canny(src,dst,50200,3)
,我发现有5个参数的Canny的Java版本有一个boolean
作为其第5个参数,向量行Vec2f
在Java版本和Imgproc.line(cdst,pt1,pt2,新标量(0,0255),3,Core.line\AA)中我找不到Vec2f
类
,在具有6
参数的行的Imgproc
中没有方法,我找到的最接近的是5和7是向量
与数组列表
相同吗?Math.PI
等于CV_PI
(弧度还是度数?)根据这里的帖子Math.PI
可以用来代替CV_PI
看看答案事实上,我是借助这条线索卖出的。请发布你找到的解决方案并接受你自己的答案,关闭另一个有用问题的副本,或删除此问题。