gpt4 book ai didi

matlab - 如何将此图像处理从 Matlab 转换为 OpenCV?

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:19 24 4
gpt4 key购买 nike

下面的链接使用 Matlab 从图像中删除非文本内容。我想用 Java 中的 OpenCV 做同样的事情。

我没有可以尝试的 Matlab,而且我是 OpenCV 的新手。虽然我知道一些关于这个过程背后的理论的基础知识,但是从 Matlab 语言到 OpenCV 3.0 的翻译有点困难。最好使用 Java。

http://www.mathworks.com/help/vision/examples/automatically-detect-and-recognize-text-in-natural-images.html

添加 1 - 使用 MSER 进行区域检测(尚未解决)

对于 MSER 检测,我可以使用以下代码来检测 MSER 关键点。

public static void MSERdetector(String imgName1, String suffix1) {
Mat imgMat1 = Imgcodecs.imread(picDir + imgName1 + "." + suffix1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
String outImgName1 = picDir + "MSER" + "_keypoints_" + imgName1 + "_" + ".tif";
Mat outImg1 = new Mat();

FeatureDetector featureDetector = FeatureDetector.create(FeatureDetector.MSER); // create the feature detector

MatOfKeyPoint keypoints1 = new MatOfKeyPoint();
featureDetector.detect(imgMat1, keypoints1);

if (!keypoints1.empty()) {
Features2d.drawKeypoints(imgMat1, keypoints1, outImg1);
Imgcodecs.imwrite(outImgName1, outImg1);
System.out.println("done");
}
else {
System.out.println("No keypoints found for: " + imgName1);
}

输出如下: enter image description here

但我不知道如何将关键点转换为区域。我需要的是:

enter image description here

添加 2 - Canny 边缘和与 MSER 区域的交集(尚未解决)

一旦我能够找到 MSER 区域,我应该将它与 Canny 边相交。我可以找到一些 Canny 边缘,如下所示。但是我不知道如何进行intersection操作。

public static void CANNYedge(String imgName1, String suffix1) {
Mat imgMat1 = Imgcodecs.imread(picDir + imgName1 + "." + suffix1, Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);
//imgMat1 = ImageUtilities.Convert2BW(imgMat1);
String outImgName1 = picDir + "_CANNY_" + imgName1 + ".tif";
Mat outImg1 = new Mat();
Imgproc.Canny(imgMat1, outImg1, 0, 500);
Imgcodecs.imwrite(outImgName1, outImg1);
}

我精明的边缘输出看起来像这样: enter image description here

ADD 3 - 现在我转向使用 VS 2013 Community

要使用 VS2013 设置 OpenCV,请检查 here .

添加 4 - 在 VC++ 2013 中编码

下面是我现在引用 here 尝试的结果.

//Step2: Detect MSER regions
Mat grayImage;
cvtColor(colorImage, grayImage, CV_BGR2GRAY);
imshow("Gray Image", grayImage);
waitKey(0);


Ptr<MSER> mserExtractor = MSER::create(); // create MSER extractor with default parameters. http://code.opencv.org/projects/opencv/wiki/MSER http://docs.opencv.org/master/d3/d28/classcv_1_1MSER.html#a49d72a1346413106516a7fc6d95c09bb
mserExtractor->setMinArea(150);
mserExtractor->setMaxArea(2000);
//Mat mserOutMask = Mat::zeros(grayImage.rows, grayImage.cols, CV_8UC3);

Mat vis;
//vis = Mat::zeros(grayImage.rows, grayImage.cols, CV_8UC3);
grayImage.copyTo(vis);

vector<vector<Point>> mserContours;
vector<Rect> mserBBox;//what's this?
mserExtractor->detectRegions(grayImage, mserContours, mserBBox);

for (int i = 0; i<mserContours.size(); i++)
{
drawContours(vis, mserContours, i, Scalar(255, 255, 255), 4);
}

imshow("MSER by contours", vis);
waitKey(0);

Mat vis2;
grayImage.copyTo(vis2);
for (vector<cv::Point> v : mserContours){
for (cv::Point p : v){
vis2.at<uchar>(p.y, p.x) = 255;
}
}
imshow("MSER by points", vis);
waitKey(0);

我得到的是这些:

vis1 - 等高线 MSER enter image description here

vis2 - 按点的 MSER enter image description here

添加 5

我刚刚试验了 text detection sample正如 Miki 所建议的那样。它需要一些经过训练的模型文件才能运行。几乎花了 2 分钟才结束,但我们可以稍后离开表演。 我的方案是对来自复杂屏幕截图的 OCR 文本(很抱歉直到现在才透露)。虽然结果对于自然场景来说非常好。屏幕截图不是那么吸引人。结果如下:

enter image description here

最佳答案

作为答案发布只是为了显示 OpenCV text detection example 的结果

enter image description here

现在您需要应用文本识别,例如 OCRHMMDecoder

您会找到一个示例 here

关于matlab - 如何将此图像处理从 Matlab 转换为 OpenCV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com