You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.9 KiB
C++

3 years ago
//
// Created by UnknownObject on 2022/11/4.
// Copyright (c) 2022 UnknownNetworkService. All rights reserved.
//
//OCR的图像预处理算法
3 years ago
#include "ocr_text.h"
3 years ago
namespace uns
3 years ago
{
//像素检查limit阈值是黑色的浓淡文字是图片中最黑的部分
bool OCRSupport::PixelCheck(const cv::Vec3b &pixel)
3 years ago
{
if (pixel[0] <= limit)
if (pixel[1] <= limit)
if (pixel[2] <= limit)
return true;
return false;
}
//图片裁切
cv::Mat OCRSupport::CutImageSize(const cv::Mat &img)
{
return img(roi);
}
//图片预处理,将彩色图片转换为黑白图片,确保文字是黑色的
cv::Mat OCRSupport::ConvertImage(const cv::Mat &img)
{
cv::imwrite("/sdcard/MainCar/OCR/ocr_old.jpg", img);
cv::Mat result(img.size(), img.type());
for (int r = 0; r < img.rows; r++)
3 years ago
{
for (int c = 0; c < img.cols; c++)
{
if (PixelCheck(img.at<cv::Vec3b>(r, c)))
result.at<cv::Vec3b>(r, c) = cv::Vec3b(0, 0, 0);
else
result.at<cv::Vec3b>(r, c) = cv::Vec3b(255, 255, 255);
}
3 years ago
}
cv::imwrite("/sdcard/MainCar/OCR/ocr_process.jpg", result);
return result;
3 years ago
}
};
3 years ago
//导出的自检函数
3 years ago
extern "C" JNIEXPORT
jstring JNICALL Java_com_uns_maincar_cpp_1interface_EnvTest_OCRTextTest(JNIEnv *env, jclass _this)
{
std::string version = "OCR Text Library Found, Version: " + std::string(OCR_TEXT_VERSION);
return env->NewStringUTF(version.c_str());
}
//导出的图像预处理函数
3 years ago
extern "C" JNIEXPORT
jobject JNICALL
Java_com_uns_maincar_cpp_1interface_OCR_ProcessImage(JNIEnv *env, jclass _this, jobject image,
jboolean self_test)
3 years ago
{
cv::Mat source;
uns::OCRSupport ocr_supp;
BitmapToMat(env, image, source);
cv::Mat img = (self_test ? ocr_supp.ConvertImage(source) : ocr_supp.ConvertImage(
ocr_supp.CutImageSize(source)));
3 years ago
jobject bmp = GenerateBitmap(env, img.cols, img.rows);
MatToBitmap(env, img, bmp);
return bmp;
}