小编Dan*_*šek的帖子

OpenCV 4.7.0 中未找到 cv2.aruco.CharucoBoard_create

我已经安装了 opencv-python-4.7.0.68 和 opencv-contrib-python-4.7.0.68

下面的代码给我以下错误:
AttributeError: module 'cv2.aruco' has no attribute 'CharucoBoard_create'

示例代码:

import cv2

aruco_dict = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_50)
board = cv2.aruco.CharucoBoard_create(11, 8, 0.015, 0.011, aruco_dict)
Run Code Online (Sandbox Code Playgroud)

python opencv

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

在OpenCV中绘制有角度的矩形

我正在使用OpenCV和python来处理涉及身体跟踪的项目,我使用HSV值来查找肤色,然后围绕它绘制一个框.

然而,虽然我可以找到被跟踪的对象并在其周围画一个方框,但矩形总是垂直的,我想知道矩形是否有任何角度,这样它们更好地显示检测到的对象,有点像minEnclosingCircle函数,但是使用了长方形

图像可能解释了我正在寻找更好的东西.我得到的盒子是绿色的,我正在寻找的东西是黄色的.如您所见,蒙版显示和成角度的矩形也将更好地包含所选区域.我还包括原始图像.

我的代码是:

    import numpy as np
    import cv2

    # Input image
    image = cv2.imread('TestIn.png')

    # Converts to grey for better reulsts
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # Converts to HSV
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    # HSV values
    lower_skin = np.array([5,36,53])
    upper_skin = np.array([19,120,125])

    mask = cv2.inRange(hsv, lower_skin, upper_skin)

    mask = cv2.erode(mask, None, iterations=2)
    mask = cv2.dilate(mask, None, iterations=2)

    # Finds contours
    im2, cnts, hierarchy = cv2.findContours(mask.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

    # Draws contours
    for c in cnts:
        if cv2.contourArea(c) < 3000: …
Run Code Online (Sandbox Code Playgroud)

python opencv tracking

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

如何使用OpenCV删除小的连接对象

我使用OpenCV和Python,我想从我的图像中删除小的连接对象.

我有以下二进制图像作为输入:

输入二进制图像

图像是此代码的结果:

dilation = cv2.dilate(dst,kernel,iterations = 2)
erosion = cv2.erode(dilation,kernel,iterations = 3)
Run Code Online (Sandbox Code Playgroud)

我想删除以红色突出显示的对象:

在此输入图像描述

如何使用OpenCV实现这一目标?

python opencv image-processing

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

如何从收据中提取相关信息

我试图使用Opencv,Tesseract和Keras的组合从一系列不同的收据中提取信息.该项目的最终结果是我应该能够使用电话拍摄收据,并从该图片中获取商店名称,支付类型(卡或现金),支付金额和更改投标.

到目前为止,我已经使用Opencv对一系列不同的样本收据进行了一些不同的预处理步骤,例如删除背景,去噪和转换为二进制图像,并留下如下图像:

收据扫描

然后我使用Tesseract在收据上执行ocr并将结果写入文本文件.我已经设法让ocr在可接受的水平上执行,所以我现在可以拍一张收据并在其上运行我的程序,我将得到一个包含收据上所有文本的文本文件.

我的问题是我不想要收据上的所有文字,我只想要一些信息,比如我上面列出的参数.我不确定如何去训练一个可以提取我需要的数据的模型.

我是否认为我应该使用Keras对图像的不同部分进行分段和分类,然后在我的模型分类为包含相关数据的部分中将文本写入文件?或者,对于我需要做的事情,是否有更好的解决方案?

对不起,如果这是一个愚蠢的问题,这是我的第一个Opencv /机器学习项目,我的相当远远不够.任何建设性的批评都会受到高度赞赏.

opencv tesseract machine-learning opencv3.0 keras

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

使用python在open cv中使用鼠标事件绘制填充多边形

我试图在坐标之间绘制一个多边形,通过单击鼠标事件获得.

第一次单击应定义多边形的起始点.每次额外点击都应绘制上一次点击的线段.当整个点击点绘制多边形时,应填充多边形内部.

有人可以建议如何在我点击图像的点之间绘制多边形吗?我正在考虑cv2.polylines功能,但我不知道如何将其与SetMouseCallback功能集成.

python opencv

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

Python:如何使这种颜色阈值函数更有效

我在Python中编写了一个自适应颜色阈值函数(因为OpenCV的cv2.adaptiveThreshold不符合我的需要)而且它太慢了.我已尽可能高效,但在1280x720图像上仍需要近500毫秒.

我将非常感谢任何能使这项功能更有效的建议!

这是函数的作用:它使用一个像素厚度的十字形作为结构元素.对于图像中的每个像素,它计算的平均值ksize相邻的像素在四个方向上独立地(即,平均的ksize同一行中的像素的左侧,在同一列的上方,在同一行的右边中,并在下面的同一栏).我以四个平均值结束,每个方向一个.如果像素比左右平均值或者顶部和底部平均值(加上一些常数C)更亮,则该像素仅满足阈值标准.

我使用同时为所有像素逐步计算这些平均值numpy.roll(),但我仍然需要这样做ksize.在ksize通常是20-50.

这是代码,相关部分实际上就是for循环中发生的事情:

def bilateral_adaptive_threshold(img, ksize=20, C=0, mode='floor', true_value=255, false_value=0):

    mask = np.full(img.shape, false_value, dtype=np.int16)

    left_thresh = np.zeros_like(img, dtype=np.float32) #Store the right-side average of each pixel here
    right_thresh = np.zeros_like(img, dtype=np.float32) #Store the left-side average of each pixel here
    up_thresh = np.zeros_like(img, dtype=np.float32) #Store the top-side average of each pixel here
    down_thresh = np.zeros_like(img, dtype=np.float32) #Store the bottom-side average of each pixel here

    for …
Run Code Online (Sandbox Code Playgroud)

python performance opencv numpy image-processing

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

如何检测文档图像上的边缘,并将部分切成单独的图像?

任务是拍摄文档的图像,并利用围绕不同“部分”的直线,以将图像拆分为不同的文档以进行进一步解析。不同“部分”的大小在页面之间是完全可变的(我们正在处理数千个页面)。这是这些图像之一的图像:

文档布局示例:

范例文件

图像分析/操作对我来说是全新的。到目前为止,我已经尝试使用Scikit图像边缘检测算法来查找“盒子”,并希望使用这些“坐标”来裁剪图像。但是,我尝试过的两种算法(Canny,Hough)在高灵敏度时选择文本行作为“边”,而在低灵敏度时不选择我想要的行。我可以编写一些自定义的低级内容来自己检测这些盒子,但是我必须假定这是一个已解决的问题。

我的方法是否朝着正确的方向前进?谢谢!

opencv image-processing edge-detection scikit-image canny-operator

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

设置具有透明度的PNG的背景颜色

我正在加载具有透明平面的PNG图像.转换为灰度时,图像中的透明区域显示为黑色,这似乎是默认背景.我需要它们是白色的.我能做什么 ?

[这不是关于如何保持透明度的常见问题.]

python opencv alpha-transparency

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

OpenCV.js 中旋转时图像自动裁剪

我使用 OpenCV.js 将图像左右旋转,但旋转时图像被裁剪。这是我的代码:

    let src = cv.imread('img');
    let dst = new cv.Mat();
    let dsize = new cv.Size(src.rows, src.cols);
    let center = new cv.Point(src.cols/2, src.rows/2);
    let M = cv.getRotationMatrix2D(center, 90, 1);
    cv.warpAffine(src, dst, M, dsize, cv.INTER_LINEAR, cv.BORDER_CONSTANT, new cv.Scalar());
    cv.imshow('canvasOutput', dst);
    src.delete(); dst.delete(); M.delete();
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

这是我的源图像:来源

这就是我要的:图像

但它返回的是这样的:裁剪过的

我应该怎么做才能解决这个问题?

P/s:除了javascript之外,我不知道如何使用不同的语言。

opencv image-processing ionic-framework

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

如何将 ATL::CImage 转换为 cv::Mat?

我想从转换ATL::CImagecv::Mat图像处理OpenCV中(C ++)。你能帮忙转换这个对象吗?

CImage从 Windows 屏幕截图中得到(使用 MFC)。然后,我想在 OpenCV Mat 对象中处理图像。

我不知道如何转换。

  • C++ 项目(VC 2017)
  • MFC
  • OpenCV 3.4.6

CImage image;
int cx;
int cy;
CWnd* pWndDesktop = CWnd::GetDesktopWindow();
CWindowDC srcDC(pWndDesktop);

Rect rcDesktopWindow;
::GetWindowRect(pWndDesktop->m_hWnd, %rcDesktopWindow);

cx = (rcDesktopWindow.right - rcDesktopWindow.left);
cy = (rcDesktopWindow.bottom - rcDesktopWindow.top);

image.create(cx, cy, srcDC.GetDeviceCaps(BITPIXEL));

CDC* pDC = CDC::FromHandle(image.GetDC());
pDC->BitBlt(0, 0, cx, cy, &srcDC, 0, 0, SRCCOPY);

image.ReleaseDC();

cv::Mat mat;

// I want set image to mat!
mat = image???
Run Code Online (Sandbox Code Playgroud)

无法转换ATL::Imagecv::Mat …

c++ mfc opencv atl

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