相关疑难解决方法(0)

拆分扫描文档中的文本行

我试图找到一种方法来打破已经自适应阈值化的扫描文档中的文本行.现在,我存储文档为无符号的整数0到255的像素值,并且这是我在像素的平均值中的每一行,以及我基于像素值的平均值是否是线分割成的范围大于250,然后我取每个范围的线的中位数.但是,这种方法有时会失败,因为图像上可能会出现黑色斑点.

是否有更加抗噪的方式来完成这项任务?

编辑:这是一些代码."扭曲"是原始图像的名称,"剪切"是我想要分割图像的地方.

warped = threshold_adaptive(warped, 250, offset = 10)
warped = warped.astype("uint8") * 255

# get areas where we can split image on whitespace to make OCR more accurate
color_level = np.array([np.sum(line) / len(line) for line in warped])
cuts = []
i = 0
while(i < len(color_level)):
    if color_level[i] > 250:
        begin = i
        while(color_level[i] > 250):
            i += 1
        cuts.append((i + begin)/2) # middle of the whitespace region
    else:
        i += 1
Run Code Online (Sandbox Code Playgroud)

编辑2:添加了示例图像 在此输入图像描述

python ocr opencv scikit-image

28
推荐指数
2
解决办法
1万
查看次数

如何使用Flann匹配之间的关系来确定合理的单应性?

我有一张全景图像,以及在该全景图像中看到的较小的建筑物图像.我想要做的是识别那个较小图像中的建筑物是否在该全景图像中,以及这两个图像是如何对齐的.

对于第一个示例,我使用的是全景图像的裁剪版本,因此像素是相同的.

import cv2
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import math

# Load images
cwImage = cv2.imread('cw1.jpg',0)
panImage = cv2.imread('pan1.jpg',0)

# Prepare for SURF image analysis
surf = cv2.xfeatures2d.SURF_create(4000)

# Find keypoints and point descriptors for both images
cwKeypoints, cwDescriptors = surf.detectAndCompute(cwImage, None)
panKeypoints, panDescriptors = surf.detectAndCompute(panImage, None)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在此输入图像描述

然后我使用OpenCV的FlannBasedMatcher来查找两个图像之间的良好匹配:

FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)
flann = cv2.FlannBasedMatcher(index_params, search_params)

# Find matches between the descriptors
matches = flann.knnMatch(cwDescriptors, panDescriptors, …
Run Code Online (Sandbox Code Playgroud)

opencv image homography flann flannbasedmatcher

3
推荐指数
1
解决办法
1793
查看次数

将opencv重映射代码从c++转换为python

我正在尝试将 c++ opencv cv2.remap 代码转换为 python。我没有收到任何错误,但结果不符合预期。我正在放大图像

代码

int main()
{
    Mat img = imread("captcha1.jpg");
    float phase = -0.8 * CV_PI;
    float omega = 2.0 * CV_PI / img.cols;
    float amp = 15;
    Mat_<Vec2f> proj(img.size());
    for (int y=0; y<img.rows; y++) {
        for (int x=0; x<img.cols; x++) {
            float u = 0;
            float v = sin(phase + float(x) * omega) * amp;
            proj(y,x) = Vec2f(float(x) + u, float(y) + v);
        }
    }
    Mat corr;
    cv::remap(img, corr, proj, cv::Mat(), INTER_LINEAR);
    imshow("in",img);
    imshow("out",corr);
    waitKey(); …
Run Code Online (Sandbox Code Playgroud)

c++ opencv remap python-3.x opencv3.0

1
推荐指数
1
解决办法
1075
查看次数