相关疑难解决方法(0)

在一组cv :: Point上执行cv :: warpPerspective以进行伪偏移

我正在尝试对一组点进行透视变换以实现偏斜效果:

http://nuigroup.com/?ACT=28&fid=27&aid=1892_H6eNAaign4Mrnn30Au8d

我正在使用下面的图像进行测试,绿色矩形显示感兴趣的区域.

我在想,如果有可能实现,我希望使用的简单组合的效果cv::getPerspectiveTransformcv::warpPerspective.我正在分享我到目前为止所写的源代码,但它不起作用.这是结果图像:

因此,有一个vector<cv::Point>定义感兴趣的区域,但点不存储在任何特定的顺序载体内,这件事情我不能在检测过程中发生改变.无论如何,稍后,向量中的点用于定义a RotatedRect,而这又用于组装cv::Point2f src_vertices[4];,所需的变量之一cv::getPerspectiveTransform().

我对顶点及其组织方式的理解可能是其中一个问题.我还认为使用a RotatedRect不是存储ROI原始点的最佳方法,因为坐标会稍微改变以适应旋转的矩形,这并不是很酷.

#include <cv.h>
#include <highgui.h>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    cv::Mat src = cv::imread(argv[1], 1);

    // After some magical procedure, these are points detect that represent …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing perspective skew

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

如何在opencv python中添加图像边框

如果我有像下面的图像,我怎么可以添加边框的图像都使得整体高度和最终的图像会增加宽度,但原始图像的高度和宽度保持原样在中间.

在此输入图像描述

python opencv computer-vision

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

minAreaRect OpenCV [Python]返回的裁剪矩形

minAreaRect在OpenCV中返回一个旋转的矩形.如何裁剪矩形内部的图像部分?

boxPoints 返回旋转矩形的角点的坐标,这样可以通过循环框内的点来访问像素,但是有更快的方法在Python中裁剪吗?

编辑

请参阅code下面的答案.

python opencv image image-processing

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

OpenCV的cv2.boundingRect()函数如何工作?

我需要解释OpenCV的boundingRect.我已经实现了它,效果很好.请问有哪些参考资料完整解释?

c++ opencv python-2.7 opencv3.0 opencv-contour

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

使用 OpenCV 的图像处理去除图像中的背景文本和噪声

我有这些图片

在此处输入图片说明

在此处输入图片说明

我想删除背景中的文本。只有captcha characters应该保留(即 K6PwKA、YabVzu)。任务是稍后使用 tesseract 识别这些字符。

这是我尝试过的,但它并没有给出很好的准确性。

import cv2
import pytesseract

pytesseract.pytesseract.tesseract_cmd = r"C:\Users\HPO2KOR\AppData\Local\Tesseract-OCR\tesseract.exe"
img = cv2.imread("untitled.png")
gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray_filtered = cv2.inRange(gray_image, 0, 75)
cv2.imwrite("cleaned.png", gray_filtered)
Run Code Online (Sandbox Code Playgroud)

我该如何改进?

注意: 我尝试了针对这个问题提出的所有建议,但没有一个对我有用。

编辑: 根据 Elias 的说法,我尝试使用 photoshop 找到验证码文本的颜色,方法是将其转换为灰度,结果介于 [100, 105] 之间。然后我根据这个范围对图像进行阈值处理。但是我得到的结果并没有从tesseract给出令人满意的结果。

gray_filtered = cv2.inRange(gray_image, 100, 105)
cv2.imwrite("cleaned.png", gray_filtered)
gray_inv = ~gray_filtered
cv2.imwrite("cleaned.png", gray_inv)
data = pytesseract.image_to_string(gray_inv, lang='eng')
Run Code Online (Sandbox Code Playgroud)

输出 :

'KEP wKA'
Run Code Online (Sandbox Code Playgroud)

结果 :

在此处输入图片说明

编辑 2:

def get_text(img_name):
    lower = (100, 100, 100)
    upper = (104, 104, 104) 
    img = …
Run Code Online (Sandbox Code Playgroud)

python opencv image image-processing computer-vision

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

在照片上强力裁剪旋转的边界框

我正在尝试稳健地提取轮廓的旋转边界框。我想拍摄一张图像,找到最大的轮廓,得到它的旋转边界框,旋转图像使边界框垂直,然后裁剪到大小。

为了演示,这是在以下代码中链接的原始图像。我想最终将那只鞋旋转到垂直并裁剪成尺寸。此答案中的以下代码似乎适用于 opencv 线条等简单图像,但不适用于照片。

在此处输入图片说明

最终结果是旋转和裁剪错误:

在此处输入图片说明

编辑:将阈值类型更改为 后cv2.THRESH_BINARY_INV,它现在正确旋转但裁剪错误:

在此处输入图片说明

import cv2
import matplotlib.pyplot as plt
import numpy as np
import urllib.request
plot = lambda x: plt.imshow(x, cmap='gray').figure


url = 'https://i.imgur.com/4E8ILuI.jpg'
img_path = 'shoe.jpg'

urllib.request.urlretrieve(url, img_path)
img = cv2.imread(img_path, 0)
plot(img)


threshold_value, thresholded_img = cv2.threshold(
    img, 250, 255, cv2.THRESH_BINARY)
_, contours, _ = cv2.findContours(thresholded_img, 1, 1)
contours.sort(key=cv2.contourArea, reverse=True)

shoe_contour = contours[0][:, 0, :]
min_area_rect = cv2.minAreaRect(shoe_contour)

def crop_minAreaRect(img, rect):

    # rotate img
    angle = rect[2]
    rows, cols = …
Run Code Online (Sandbox Code Playgroud)

python opencv image cv2

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

如何去歪斜文本图像也检索该图像的新边界框?

这是我得到的一张收据图像,我使用 matplotlib 绘制了它,如果您看到图像,其中的文本不是直的。我该如何去歪斜并修复它?

from skimage import io
import cv2

# x1, y1, x2, y2, x3, y3, x4, y4
bbox_coords = [[20, 68], [336, 68], [336, 100], [20, 100]]

image = io.imread('https://i.ibb.co/3WCsVBc/test.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

fig, ax = plt.subplots(figsize=(20, 20))
ax.imshow(gray, cmap='Greys_r')

# for plotting bounding box uncomment the two lines below
#rect = Polygon(bbox_coords, fill=False, linewidth=1, edgecolor='r')
#ax.add_patch(rect)
plt.show()

print(gray.shape)
(847, 486)
Run Code Online (Sandbox Code Playgroud)

收据图片

我想如果我们想先去歪斜,我们必须找到边缘,所以我尝试使用精明算法找到边缘,然后得到如下所示的轮廓。

from skimage import filters, feature, measure

def edge_detector(image):
    image = filters.gaussian(image, 2, mode='reflect')
    edges = feature.canny(image) …
Run Code Online (Sandbox Code Playgroud)

python ocr opencv scikit-image image-preprocessing

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