图片:
代码:
#include#include #include #include "utils.hpp" using namespace std; using namespace cv; bool cmp(const Rect a, const Rect b) { return a.x < b.x; } int main() { Mat src_img, gray_img, gauss_img, threshold_img, ContrastImg; src_img = cv::imread("D:/images/numDect.jpg"); cvShow("src_img", src_img); //2, 图像对比度增强 ContrastImg = ContrastChange(src_img); cvShow("ContrastImg", ContrastImg); //3, 灰度化,高斯模糊 cv::cvtColor(ContrastImg, gray_img, cv::COLOR_BGR2GRAY); cvShow("gray_img", gray_img); cv::GaussianBlur(gray_img, gauss_img, Size(5, 5), 1); cvShow("gauss_img", gauss_img); //4, 阈值处理 cv::threshold(gauss_img, threshold_img, 0, 255, cv::THRESH_BINARY_INV | cv::THRESH_OTSU); cvShow("thresholdImg", threshold_img); //5,找轮廓 vector > contours; cv::findContours(threshold_img, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE); Mat drawImg = src_img.clone(); cv::drawContours(drawImg, contours, -1, Scalar(0, 0, 255), 2); cvShow("drawImg", drawImg); vector words; for (size_t i = 0; i < contours.size(); i++) { Rect rect = cv::boundingRect(contours[i]); words.push_back(rect); } sort(words.begin(), words.end(), cmp); for (size_t i = 0; i < words.size(); i++) { Mat sigleimg = src_img(words[i]); cvShow("sigleimg", sigleimg); } return 0; }
函数cvShow
inline void cvShow(string name, Mat img)
{
cv::imshow(name, img);
cv::waitKey(0);
}
函数ContrastChange
# 图像对比度增强
inline Mat ContrastChange(Mat img)
{
Mat alpha = (Mat_(1, 1) << 1.80);
Mat dst_img;
cv::multiply(img, alpha, dst_img);
return dst_img;
}



