小编sin*_*ium的帖子

检测文本图像是否颠倒

我有几百张图像(扫描的文档),其中大多数是歪斜的。我想使用Python使它们偏斜。
这是我使用的代码:

import numpy as np
import cv2

from skimage.transform import radon


filename = 'path_to_filename'
# Load file, converting to grayscale
img = cv2.imread(filename)
I = cv2.cvtColor(img, COLOR_BGR2GRAY)
h, w = I.shape
# If the resolution is high, resize the image to reduce processing time.
if (w > 640):
    I = cv2.resize(I, (640, int((h / w) * 640)))
I = I - np.mean(I)  # Demean; make the brightness extend above and below zero
# Do the radon transform
sinogram = …
Run Code Online (Sandbox Code Playgroud)

python opencv image-rotation skew

35
推荐指数
2
解决办法
2542
查看次数

使用无监督机器学习聚类图像

我有一个包含身份证、账单和护照的图像数据库。
我想将这些图像分为不同的组(即身份证、账单和护照)。
正如我所读到的那样,完成这项任务的方法之一是聚类(因为它将是无人监督的)。
我的想法是这样的:聚类将基于图像之间的相似性(即具有相似特征的图像将被分组在一起)。
我也知道这个过程可以通过使用 k-means 来完成。
所以我的问题是关于特征和使用 K-means 的图像。
如果有人以前做过这件事,或者对此有所了解,请您推荐一些链接以开始或建议任何有用的功能。

python cluster-analysis computer-vision k-means unsupervised-learning

6
推荐指数
2
解决办法
3301
查看次数

为什么相同的像素使用PIL和Opencv有不同的值?

我从互联网上下载了一张随机图像,使用它打开它PIL.Image.open()cv2.imread()然后检查了一些像素的值。问题是我使用 PIL 和 Opencv 得到了相同像素的不同值!
这是我尝试过的图像:
在此输入图像描述 这就是我所做的:

>>> import cv2
>>> from PIL import Image
>>> img = cv2.imread('img.jpg')
>>> im = Image.open('img.jpg')
>>> img[0][0]
>>> array([142, 152, 146], dtype=uint8)
>>> im.getpixel((0, 0))
>>> (138, 158, 131)
Run Code Online (Sandbox Code Playgroud)

两者的 R、G、B 值((138!= 146)、(158!= 152)、(131!= 142))im不匹配,尽管它们img是相同的像素和相同的图像!
我查看了SO帖子,发现这篇文章讨论了同样的问题,所以我使用发布的代码再次检查差异:

from PIL import Image
import cv2
import sys
from hashlib import md5
import numpy as np

def hashIm(im):
    imP = np.array(Image.open(im))

    # Convert to BGR …
Run Code Online (Sandbox Code Playgroud)

python opencv python-imaging-library

6
推荐指数
2
解决办法
3091
查看次数

使用一个 glob.glob 而不是多个 glob.glob

我有一个包含不同类型文件的文件夹。我只需要处理图像文件(jpg、png、jpeg、JPG...)。为此,我glob.glob只获取带有“jpg”、“png”等扩展名的文件。
问题是我必须使用glob.glob多次(与图像扩展名数量一样多)才能获取所有图像:

import glob
images = glob.glob('tests/*.jpg') + glob.glob('tests/*.jpeg') + glob.glob('tests/*.png') + glob.glob('tests/*.JPG')  
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以glob.glob以更优化的形式使用(类似glob.glob('path/*.{'jpg', 'png', 'jpeg', 'JPG'}),或者是否有更简单的函数来使用它而不是glob

python glob python-3.x

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

从文本图像中删除非直线

我有一个包含文本但有非直线绘制的图像。

在此处输入图片说明

我想删除这些行而不影响/删除文本中的任何内容。
为此,我使用了霍夫概率变换:

import cv2
import numpy as np


def remove_lines(filename):
    img = cv2.imread(filename)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    edges = cv2.Canny(gray, 50, 200)
    lines = cv2.HoughLinesP(edges, rho=1, theta=1*np.pi/180,
                            threshold=100, minLineLength=100, maxLineGap=5)
    # Draw lines on the image
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 3)

    cv2.imwrite('result', img) 
Run Code Online (Sandbox Code Playgroud)

结果不如我预期的好:

在此处输入图片说明

没有完全检测到线条(仅检测到线条的某些线段,直线段)。
我对cv2.Cannycv2.HoughLinesP参数做了一些调整,但是也没有用。

我也尝试过cv2.createLineSegmentDetector(由于许可证问题,在最新版本的opencv中不可用,因此我不得不将opencv降级到4.0.0.21版):

import cv2
import numpy as np
def remove_lines(filename):
    im = cv2.imread(filename)
    gray …
Run Code Online (Sandbox Code Playgroud)

python opencv image image-processing line

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

Python:对由字母和数字组成的字符串列表进行排序

我有一个列表,其元素由字母和数字组成,如下所示:

['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8'] 
Run Code Online (Sandbox Code Playgroud)

我想对其进行排序,所以我使用了函数 sort,但我得到了输出:

>>> a = ['H1', 'H100', 'H10', 'H3', 'H2', 'H6', 'H11', 'H50', 'H5', 'H99', 'H8']
>>> print sorted(a)
['H1', 'H10', 'H100', 'H11', 'H2', 'H3', 'H5', 'H50', 'H6', 'H8', 'H99']
Run Code Online (Sandbox Code Playgroud)

但是,我希望输出是:

['H1', 'H2', 'H3', 'H5', 'H6', 'H8', 'H10', 'H11', 'H50', 'H99', 'H100']
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点吗?谢谢

python sorting list

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

即使没有任何更改,Alembic 也会不断创建空的迁移文件

我正在开发一个使用 sqlalchemy、postgres 和 alembic 的应用程序。
\n项目结构如下:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 alembic.ini\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 migrations\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 env.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 script.py.mako\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 versions\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 datamodel1.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 datamodel2.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 requirements.txt\n\n3 directories, 10 files\n
Run Code Online (Sandbox Code Playgroud)\n

其中:
\n的内容models/base.py是:

\n
from sqlalchemy.ext.declarative.api import declarative_base, DeclarativeMeta\n\nBase: DeclarativeMeta = declarative_base()\n
Run Code Online (Sandbox Code Playgroud)\n

的内容models/datamodel1.py是:

\n
from models.base import Base\nfrom sqlalchemy.sql.schema import Column\nfrom sqlalchemy.sql.sqltypes import String, Date, Float\n\n\nclass Model1(Base):\n    __tablename__ = 'model1_table'\n\n    model1_id = Column(String, primary_key=True)\n    col1 = Column(String)\n    col2 = Column(String)\n
Run Code Online (Sandbox Code Playgroud)\n

的内容models/datamodel2.py …

python postgresql sqlalchemy alembic

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

我的CNN分类器对随机图像给出了错误的预测

我使用3个数据类别(身份证,护照,账单)训练了CNN分类器(使用tensorflow)。
当我用属于3类之一的图像进行测试时,它给出了正确的预测。但是,当我用错误的图像(例如汽车图像)对其进行测试时,它会一直给我预测(即,它预测该汽车属于ID卡类别)。

有没有办法使它显示错误消息而不是给出错误的预测?

classification conv-neural-network tensorflow

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

从扫描图像中修剪空白噪声空间的更快方法

我正在处理扫描文件(身份证、驾照……)。当我对它们进行一些预处理时,我遇到的问题是文档仅占据图像的一小部分,所有其余区域都是空白/噪声空间。出于这个原因,我想开发一个 Python 代码,自动修剪不需要的区域并仅保留文档所在的区域(无需我预先定义每个文档的分辨率)。findContours()使用OpenCV就可以实现这一点。然而,大多数文档(尤其是旧文档)轮廓不清晰,四肢不够清晰,无法被检测到。另外,空白区域中的噪声也可以被检测为轮廓。因此轮廓并不适用于所有情况。
我的想法是:

  1. 读取图像并将其转换为灰度。
  2. 应用bitwise_not()OpenCV 的函数将背景与前景分开。
  3. 应用自适应平均阈值来消除尽可能多的噪声(并最终美化背景)。

在这个级别,我的背景几乎是白色的,文档是黑色的,但包含一些白色间隙。

  1. 所以我应用了侵蚀来填补文档部分的空白。
  2. 读取图像的每一行,如果其中20%包含黑色,则保留它,如果是白色,则删除它。并对图像的每一列执行相同的操作。
  3. 根据黑线和列的索引的最小值和最大值裁剪图像。

这是我的代码和一些评论:

import cv2
import numpy as np

def crop(filename):
    #Read the image
    img = cv2.imread(filename)
    #Convert to grayscale
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #Separate the background from the foreground
    bit = cv2.bitwise_not(gray)
    #Apply adaptive mean thresholding
    amtImage = cv2.adaptiveThreshold(bit, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 35, 15)
    #Apply erosion to fill the gaps
    kernel = np.ones((15,15),np.uint8)
    erosion = cv2.erode(amtImage,kernel,iterations = 2)
    #Take the height …
Run Code Online (Sandbox Code Playgroud)

python optimization opencv image-processing

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

使用python检查pytesseract版本

有没有办法在python中检查pytesseract版本?
根据pytesseract的PyPi文档,有一个内置函数get_tesseract_version来获取pytesseract版本。但是当我在 python 中运行它时,我得到以下信息:

>>> import pytesseract
>>> pytesseract.get_tesseract_version
<function get_tesseract_version at 0x7f4b9edd4598>
>>> print(pytesseract.get_tesseract_version)
<function get_tesseract_version at 0x7f4b9edd4598>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用 pytesseract 版本pip freeze,但我想使用 python 获得它。那可能吗?

python python-tesseract

2
推荐指数
2
解决办法
7229
查看次数