问题描述
我想使用OpenCV的在Android手机上检测线。我修改了教程1基本 - 2.使用OpenCV的摄像头的样品。我也使用霍夫线变换作为一个例子。不过,我越来越怪异号码(至少我认为是怪异的数字)的点。范围为1000 -1000为湾
我不完全理解code(主要是对加/减1000 *(一个或部分-b))。
在最后,我没有看到行的。
谁能给我个忙吗?也让我知道如果你需要更多的信息。
capture.retrieve(mGray,Highgui.CV_CAP_ANDROID_GREY_FRAME);
Imgproc.Canny(mGray,mIntermediateMat,80,100);
Imgproc.HoughLines(mIntermediateMat,mLines,1,Math.PI / 180,100);
标颜色=新的标量(0,0,255);
双[]的数据;
双RHO,THETA;
点PT1 =新的点();
点PT2 =新的点();
双A,B;
双X0,Y0;
的for(int i = 0; I< mLines.cols();我++)
{
数据= mLines.get(0,I);
rho沸石=数据[0];
THETA =数据[1];
A = Math.cos(THETA);
B = Math.sin(THETA);
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);
Core.line(mIntermediateMat,PT1,PT2,色彩,3);
}
Imgproc.cvtColor(mIntermediateMat,mRgba,Imgproc.COLOR_GRAY2BGRA,4);
BMP位= Bitmap.createBitmap(mRgba.cols(),mRgba.rows(),Bitmap.Config.ARGB_8888);
如果(Utils.matToBitmap(mRgba,BMP))
返回BMP;
bmp.recycle();
返回null;
我使用的HoughLineP找到我的框线,并吸引他们回来。
下面是我的code ...希望这会有所帮助。
垫mYuv =新垫();
垫mRgba =新垫();
垫thresholdImage =新垫(getFrameHeight()+ getFrameHeight()/ 2,getFrameWidth(),CvType.CV_8UC1);
mYuv.put(0,0,数据);
Imgproc.cvtColor(mYuv,mRgba,Imgproc.COLOR_YUV420sp2RGB,4);
Imgproc.cvtColor(mRgba,thresholdImage,Imgproc.COLOR_RGB2GRAY,4);
Imgproc.Canny(thresholdImage,thresholdImage,80,100,3);
垫线=新材料();
INT阈值= 50;
INT minLineSize = 20;
INT lineGap = 20;
Imgproc.HoughLinesP(thresholdImage,线,1,Math.PI / 180,阈值,minLineSize,lineGap);
为(中间体X = 0 X - 其中; lines.cols(); X ++)
{
双[] VEC = lines.get(0,X);
双X1 = vec的[0],
Y1 = vec的[1],
X2 = vec的[2],
Y2 = vec的[3];
点开始=新的点(X1,Y1);
点结束=新的点(x2,y2);
Core.line(mRgba,开始,结束,新的标量(255,0,0),3);
}
BMP位= Bitmap.createBitmap(getFrameWidth(),getFrameHeight(),Bitmap.Config.ARGB_8888);
如果(Utils.matToBitmap(mRgba,BMP))
返回BMP;
I am trying to use OpenCV on an android phone to detect lines. I modified the 'Tutorial 1 Basic - 2. Use OpenCV Camera' sample. I am also using Hough Line Transform as an example.However, I am getting weird numbers (at least what I believe to be weird numbers) for the points. In the range 1000 to -1000 for b.
I don't fully understand the code (mostly the part about adding/subtracting 1000 * (a or -b)).
In the end I do not see the lines at all.
Could anyone give me a hand? Also let me know if you need more information.
capture.retrieve(mGray, Highgui.CV_CAP_ANDROID_GREY_FRAME);
Imgproc.Canny(mGray, mIntermediateMat, 80, 100);
Imgproc.HoughLines(mIntermediateMat, mLines, 1, Math.PI/180, 100);
Scalar color = new Scalar(0, 0, 255);
double[] data;
double rho, theta;
Point pt1 = new Point();
Point pt2 = new Point();
double a, b;
double x0, y0;
for (int i = 0; i < mLines.cols(); i++)
{
data = mLines.get(0, i);
rho = data[0];
theta = data[1];
a = Math.cos(theta);
b = Math.sin(theta);
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);
Core.line(mIntermediateMat, pt1, pt2, color, 3);
}
Imgproc.cvtColor(mIntermediateMat, mRgba, Imgproc.COLOR_GRAY2BGRA, 4);
Bitmap bmp = Bitmap.createBitmap(mRgba.cols(), mRgba.rows(), Bitmap.Config.ARGB_8888);
if (Utils.matToBitmap(mRgba, bmp))
return bmp;
bmp.recycle();
return null;
I am using HoughLineP to find lines in my frame and draw them back out.
Here is my code... hope this helps.
Mat mYuv = new Mat();
Mat mRgba = new Mat();
Mat thresholdImage = new Mat(getFrameHeight() + getFrameHeight() / 2, getFrameWidth(), CvType.CV_8UC1);
mYuv.put(0, 0, data);
Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4);
Imgproc.cvtColor(mRgba, thresholdImage, Imgproc.COLOR_RGB2GRAY, 4);
Imgproc.Canny(thresholdImage, thresholdImage, 80, 100, 3);
Mat lines = new Mat();
int threshold = 50;
int minLineSize = 20;
int lineGap = 20;
Imgproc.HoughLinesP(thresholdImage, lines, 1, Math.PI/180, threshold, minLineSize, lineGap);
for (int x = 0; x < lines.cols(); x++)
{
double[] vec = lines.get(0, x);
double x1 = vec[0],
y1 = vec[1],
x2 = vec[2],
y2 = vec[3];
Point start = new Point(x1, y1);
Point end = new Point(x2, y2);
Core.line(mRgba, start, end, new Scalar(255,0,0), 3);
}
Bitmap bmp = Bitmap.createBitmap(getFrameWidth(), getFrameHeight(), Bitmap.Config.ARGB_8888);
if (Utils.matToBitmap(mRgba, bmp))
return bmp;
这篇关于Android的OpenCV的绘图霍夫线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!