Я пытаюсь распознать изображение, которое включает в себя как цифры, так и символы, используя библиотеку Tesseract с opencv и c ++. Перед вызовом библиотеки tesseract я использовал шкалу серого изображения с помощью opencv
cvtColor(roiImg,roiImg,CV_BGR2GRAY);
Это
Результаты распознавания для этого изображения не были точными на 100%.
Затем это же изображение было протестировано с библиотекой подушек с питоном. Исходное изображение было серым с использованием следующего метода.
gray = image.convert('L')
Это
Последнее упомянутое серое масштабированное изображение дало 100% точные результаты.
Когда я искал в интернете, было упомянуто, что оба метода opencv BGR2Gray и pillow img.convert используют один и тот же алгоритм преобразования яркости.
В чем причина двух разных результатов распознавания?
Заранее спасибо
подушка может читать только 3×8-битные пиксели для цветного изображения.
Вот быстрый тест, чтобы увидеть, как обе библиотеки будут округлять значения:
Код OpenCV:
cv::Mat img(2, 1, CV_8UC3), img_gray;
img.at<cv::Vec3b>(0, 0) = cv::Vec3b(248, 249, 249); //BGR
img.at<cv::Vec3b>(1, 0) = cv::Vec3b(249, 248, 248); //BGR
cv::cvtColor(img, img_gray, cv::COLOR_BGR2GRAY);
std::cout << "img:\n" << img << std::endl;
std::cout << "img_gray:\n" << img_gray << std::endl;
float val1 = 249*0.299f + 249*0.587f + 248*0.114f; //RGB
float val2 = 248*0.299f + 248*0.587f + 249*0.114f; //RGB
std::cout << "val1=" << val1 << std::endl;
std::cout << "val2=" << val2 << std::endl;
IMG:
[248, 249, 249;249, 248, 248]
img_gray:
[249;248]
знач1 = 248,886
знач2 = 248,114
Код Python:
rgbArray = np.zeros((2,1,3), 'uint8')
rgbArray[0,0,0] = 249 #R
rgbArray[0,0,1] = 249 #G
rgbArray[0,0,2] = 248 #B
rgbArray[1,0,0] = 248 #R
rgbArray[1,0,1] = 248 #G
rgbArray[1,0,2] = 249 #B
img = Image.fromarray(rgbArray)
imgGray = img.convert('L')
print("rgbArray:\n", rgbArray)
print("imgGray:\n", np.asarray(imgGray))
print("np.asarray(imgGray).dtype: ", np.asarray(imgGray).dtype)
rgbArray:
[[[249 249 248]] [[248 248 249]]]imgGray:
[[248] [248]]np.asarray (imgGray) .dtype: uint8
Других решений пока нет …