我是android的OpenCV的新手,我试图使该图像笔直,但没有结果。
到目前为止我已经完成的步骤
1。
//convert the image to gray scale
Imgproc.cvtColor(img, imgGray, Imgproc.COLOR_BGR2GRAY);
2。
//blur the image
Imgproc.GaussianBlur(imgGray, imgGaussianBlur, new Size(3, 3), 0);
3。
//sobel filter
Imgproc.Sobel(imgGaussianBlur, imgSobel, -1, 1, 0);
4。
// Thresholding the image
Imgproc.adaptiveThreshold(imgSobel, imgAdaptiveThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY_INV, 99, 4);
5。
Mat element = getStructuringElement(MORPH_RECT, new Size(18, 4));
Imgproc.morphologyEx(imgAdaptiveThreshold, imgMoprhological, CV_MOP_CLOSE, element); //или imgThreshold
//Imgcodecs.imwrite("changes/st/6_imgMoprhologicald.png", imgMoprhological);
imgContours = imgMoprhological.clone();
Imgproc.findContours(imgContours,
contours,
new Mat(),
Imgproc.RETR_LIST,
Imgproc.CHAIN_APPROX_SIMPLE);
6。
imgMinAreaRect = img1.clone();
if (contours.size() > 0) {
for (MatOfPoint matOfPoint : contours) {
MatOfPoint2f points = new MatOfPoint2f(matOfPoint.toArray());
RotatedRect box = Imgproc.minAreaRect(points);
if (checkImageRatio(box)) {
Imgproc.rectangle(imgMinAreaRect, box.boundingRect().tl(), box.boundingRect().br(), new Scalar(0, 0, 255));
imgDetectedPlateCandidate = new Mat(imgAdaptiveThreshold_forCrop, box.boundingRect());
if (checkDensity(imgDetectedPlateCandidate))
imgDetectedPlateTrue = imgDetectedPlateCandidate.clone();
} else
Imgproc.rectangle(imgMinAreaRect, box.boundingRect().tl(), box.boundingRect().br(), new Scalar(0, 255, 0));
}
}
image1 = Bitmap.createBitmap(imgDetectedPlateTrue.cols(), imgDetectedPlateTrue.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(imgDetectedPlateTrue, image1);
return image1;
这是我到目前为止所做的,但是有时返回错误或为null。 有人可以帮我吗?
我想要的是