使用opencv和tensorflow解决数字验证码

问题描述 投票:0回答:1

我正在开发一个使用 OpenCV 进行图像预处理的项目。下面是我用于预处理图像的代码:

def preprocess_with_opencv(img):
    img = img.numpy()

    # Resize
    img = cv2.resize(img, (img_width, img_height), interpolation=cv2.INTER_AREA)

    # GaussianBlur
    img = cv2.GaussianBlur(img, (3, 3), 0)

    # Adaptive Threshold
    img = cv2.adaptiveThreshold(
        img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2
    )

    # Chuẩn hóa
    img = img.astype("float32") / 255.0
    img = np.expand_dims(img, axis=-1)

    return img

预处理后,我使用以下函数对图像进行编码以进行进一步处理:

def encode_single_sample(img_path, label):
    # 1. Đọc ảnh
    img = tf.io.read_file(img_path)

    # 2. Decode ảnh (grayscale)
    img = tf.io.decode_png(img, channels=1)

    # 3. Sử dụng OpenCV để xử lý trước
    img = tf.py_function(preprocess_with_opencv, [img], Tout=tf.float32)

    # 4. Transpose nếu mô hình yêu cầu
    img = tf.transpose(img, perm=[1, 0, 2])

    # 5. Trả về dictionary (image, label)
    return {"image": img, "label": label}

原图是这样的:

enter image description here

但是,使用encode_single_sample函数处理图像后,数据似乎不正确,并且输出图像不清晰。如何解决这个问题并确保处理后的图像准确清晰?

python numpy tensorflow opencv
1个回答
0
投票

可能与代码行有关

img = tf.transpose(img, perm=[1, 0, 2])

在encode_single_sample函数中。

我运行代码并使用 matplotlib 的 matshow() 函数检查输出,看起来图像是相同的,但旋转了 90 度。检查输入节点所需的矩阵顺序并相应地转置图像矩阵。

© www.soinside.com 2019 - 2024. All rights reserved.