【问题标题】:Python Code for text detection in video not working?用于视频中文本检测的 Python 代码不起作用?
【发布时间】:2016-10-04 12:02:44
【问题描述】:

我有这段代码用于视频中的文本检测,每次我尝试运行它时都会出现这个错误。

这是我的代码:

import cv2
import numpy as np
#from pytesser import *

def text_detection():
   cap=cv2.VideoCapture(0)
    while True:
        ret,img=cap.read()
        gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        ret1,mask= cv2.threshold(gray,180,255,cv2.THRESH_BINARY)
        image_final=cv2.bitwise_and(gray,gray,mask=mask)
        ret2,new_img= cv2.threshold(image_final,180,255,cv2.THRESH_BINARY)
        kernel=cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
        dilated=cv2.dilate(new_img,kernel,iterations=9)
        idk,contours,hierarchy=cv2.findContours(dilated,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
        for contour in contours:
            [x,y,w,h]=cv2. boundingRect(contour)

            if w<35 and h<35:
                continue

         cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,255),2)

         cv2.imshow('text_detect',img)
         k=cv2.waitKey(1)& 0xff
         if k==ord('q'):
            break
         cap.release()
         cv2.destroyAllWindows()



text_detection()

错误:

灰色=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cv2.error: D:\Build\OpenCV\opencv-3.1.0\modules\imgproc\src\color.cpp:7456: 错误:(-215) scn == 3 ||函数 cv::ipp_cvtColor 中的 scn == 4

请帮帮我。

【问题讨论】:

  • 在 cv2.cvtColor() 中使用 img 之前是否检查过它是否不是 None

标签: python opencv opencv3.0


【解决方案1】:

您好像忘记打开()摄像头了。

import cv2

cam = cv2.VideoCapture(0)
cam.open(0)
results = [ cam.read()[0] for i in range(100) ]
print results

此代码 sn-p 应设置、打开并验证捕获是否适用于 100 次捕获。

【讨论】:

  • Vtik 我尝试将 sn-p 添加到代码中,但是如果您将 sn-p 放入循环中,它会导致很多闪烁的窗口,这没关系,但是当您不将其放入循环中时它返回相同的错误
  • 只需在 while 循环之前添加 cap.open(0),而不是所有的 sn-p。那只是一个演示......
  • 您是否单独尝试了 sn-p,看起来您没有从相机中获取图像。检查一下。
  • Vtik 我已经有一些旧脚本可以在没有 cap.open(0) 的情况下完美运行,但我不知道这会发生什么。我也单独尝试过您的 sn-p 一次,它显示所有结果都是正确的。
  • 添加.open()的时候,有没有同样的错误?
【解决方案2】:

在将其转换为灰度之前似乎没有捕获任何帧。 在进一步处理之前,您应该添加一个检查以验证是否已捕获帧

import time

def text_detection():
   cap=cv2.VideoCapture(0)
    while True:
        ret,img=cap.read()

        """ adding 0.5 sec delay and verifying if the frame is captured or not.
            It will print the message if the frame is not captured. """

        time.sleep(0.5)
        if not ret:
           print('No frame is captured')
           break

        gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
        ret1,mask= cv2.threshold(gray,180,255,cv2.THRESH_BINARY)

""" 
perform your normal processing

"""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 2011-08-05
    • 2011-12-21
    • 2011-10-24
    • 1970-01-01
    • 2021-06-29
    • 2021-05-31
    相关资源
    最近更新 更多