I am trying to make a perspective correction for quadrilateral objects using opencv3. I managed to show the lines and also implemented the Houghlines using Imgproc.HoughLinesP()
and tried to highlight the lines using Imgproc.lines()
but output was no success. Below is my code and also I have attached my output image.
Please let me know what is wrong happening and what should be done...
Mat initImg; // initial image
Mat greyImg; // converted to grey
Mat lines = new Mat();
int threshold = 50;
int minLineSize = 20;
int lineGap = 10;
initImg = Imgcodecs.imread(imgLoc, 1);
greyImg = new Mat();
Imgproc.cvtColor(initImg, greyImg, Imgproc.COLOR_BGR2GRAY);
Bitmap bitm = Bitmap.createBitmap(greyImg.cols(), greyImg.rows(),Bitmap.Config.ARGB_8888);
Imgproc.blur(greyImg, greyImg, new Size(3.d, 3.d));
Imgproc.adaptiveThreshold(greyImg, greyImg, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 15, 4);
Imgproc.HoughLinesP(greyImg, lines, 1, Math.PI/180, threshold,
minLineSize, lineGap);
// lines returns rows x columns and rows is always 1. I dont know why please help me to understand
for (int x = 0; x < lines.cols(); x++) {
double[] vec = lines.get(0, x);
double[] val = new double[4];
double x1 = vec[0],
y1 = vec[1],
x2 = vec[2],
y2 = vec[3];
System.out.println(TAG+"Coordinates: x1=>"+x1+" y1=>"+y1+" x2=>"+x2+" y2=>"+y2);
Point start = new Point(x1, y1);
Point end = new Point(x2, y2);
Imgproc.line(greyImg, start, end, new Scalar(0,255, 0, 255), 3);
}
Utils.matToBitmap(greyImg, bitm);
if(bitm!=null){
Toast.makeText(getApplicationContext(), "Bitmap not null", Toast.LENGTH_SHORT).show();
iv.setImageBitmap(bitm);
}else{
Toast.makeText(getApplicationContext(), "Bitmap null", Toast.LENGTH_SHORT).show();
}
My Output: