OpenCV-(-215:断言失败) _src.total() > 0 函数 'cv::warpPerspective'

2023-12-14

我的完整代码:

import cv2 as cv
import numpy as np


cap = cv.VideoCapture(0 + cv.CAP_DSHOW)
imgTarget = cv.imread('photos\TargetImage.jpg') #bu resmimiz
myVid = cv.VideoCapture('photos\video.mp4')


detection = False
frameCounter = 0
imgVideo = cap.read()
success, imgVideo = myVid.read()
hT,wT,cT = imgTarget.shape #burada resmimizin yüksekliğini, kalınlığını genişliğini falan alıyoruz.
'''while myVid.isOpened():
    success, Video = myVid.read()
    if success:
        Video = cv.resize(Video, (wT, hT))'''

#burada key points yani böyle önemli bölgeler, köşeler gibi yerleri beliriliyoruz.
orb = cv.ORB_create(nfeatures=1000)
kp1, des1 = orb.detectAndCompute(imgTarget,None)

while True: #burada webcam ile fotoğrafları birleştircez.
 

    sucess,imgWebcam = cap.read()
    imgAug = imgWebcam.copy()
    #burada key points yani böyle önemli bölgeler, köşeler gibi yerleri beliriliyoruz.
    kp2, des2 = orb.detectAndCompute(imgWebcam, None)#imgwebcami myvid yapıp değiştir o zaman oldu .d tek seferliktir belki?
    # imgWebcam = cv2.drawKeypoints(imgWebcam, kp2, None)
 
    if detection == False:
        myVid.set(cv.CAP_PROP_POS_FRAMES,0)
        frameCounter = 0
    else:
        if frameCounter == myVid.get(cv.CAP_PROP_FRAME_COUNT):
            myVid.set(cv.CAP_PROP_POS_FRAMES, 0)
            frameCounter = 0
        success, imgVideo = myVid.read()
        imgVideo = cv.resize(imgVideo, (wT, hT))
 
    #burada ise matches yani webcam resmi ile fotoğrafımız arasındaki benzerlikleri alıyoruz.
    bf = cv.BFMatcher()
    matches = bf.knnMatch(des1,des2,k=2)
    good =[]
    for m,n in matches:
        if m.distance < 0.75 *n.distance:
            good.append(m)
    print(len(good))
    imgFeatures = cv.drawMatches(imgTarget,kp1,imgWebcam,kp2,good,None,flags=2)
 
    if len(good) > 20: #burada eğer anahtar bölgelerimiz 20 den fazla şekilde uyuşuyorsa, tanımlama(detection) tamamlanmış oluyor.
        detection = True
        srcPts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
        dstPts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
        matrix, mask = cv.findHomography(srcPts,dstPts,cv.RANSAC,5)
        print(matrix)

        #eşleşine resmin etrafını çiziyoruz
        pts = np.float32([[0,0],[0,hT],[wT,hT],[wT,0]]).reshape(-1,1,2)
        dst = cv.perspectiveTransform(pts,matrix)
        img2 = cv.polylines(imgWebcam,[np.int32(dst)],True,(255,0,255),3)

        #burada videomuzu, webcam resmimiz ile aynı boyuta getiriyoruz.
        imgWarp = cv.warpPerspective(imgVideo,matrix, (imgWebcam.shape[1],imgWebcam.shape[0]))

。 。 。 。 。 大家好,我正在做一个项目。在我的代码中,我尝试使用 warpPerspective 参数。但在那一行中它给出了错误:

错误:OpenCV(4.0.1) C:\ci\opencv-suite_1573470242804\work\modules\imgproc\src\imgwarp.cpp:2903: 错误:(-215:断言失败)函数中的 _src.total() > 0 'cv::warpPerspective'

这是我的相关代码错误:

imgWarp = cv.warpPerspective(imgVideo,matrix, (imgWebcam.shape[1],imgWebcam.shape[0]))

我还将所有代码复制到页面顶部,因为可能需要它。

我的网络摄像头有问题吗?但它也适用于其他代码或应用程序。为什么会出现此错误以及如何解决它?

我正在等待您的帮助...任何建议都会对解决这个问题有很大帮助。


让我从对您的代码进行一个小的更改开始。

当你初始化时使用\分隔符,您的代码仅适用于 Windows。

imgTarget = cv.imread('photos\TargetImage.jpg') #bu resmimiz
myVid = cv.VideoCapture('photos\video.mp4')

如果你使用os.path's sep,它将适用于所有操作系统。

from os.path import sep

imgTarget = cv.imread('photos' + sep + 'TargetImage.jpg') #bu resmimiz
myVid = cv.VideoCapture('photos' + sep + 'video.mp4')

我建议您使用默认分辨率并初始化您的cap变量为:

cap = cv.VideoCapture(0)

您还可以显示imgWarp using imshow

cv.imshow("imgWarp", imgWarp)
cv.waitKey(0)

输出示例:

enter image description here

Code:


import cv2 as cv
import numpy as np

from os.path import sep

cap = cv.VideoCapture(0)
imgTarget = cv.imread('photos' + sep + 'TargetImage.jpg')  # bu resmimiz
myVid = cv.VideoCapture('photos' + sep + 'video.mp4')

detection = False
frameCounter = 0
# imgVideo = cap.read()
success, imgVideo = myVid.read()
hT, wT, cT = imgTarget.shape  # burada resmimizin yüksekliğini, kalınlığını genişliğini falan alıyoruz.
'''while myVid.isOpened():
    success, Video = myVid.read()
    if success:
        Video = cv.resize(Video, (wT, hT))'''

# burada key points yani böyle önemli bölgeler, köşeler gibi yerleri beliriliyoruz.
orb = cv.ORB_create(nfeatures=1000)
kp1, des1 = orb.detectAndCompute(imgTarget, None)

while myVid.isOpened():  # burada webcam ile fotoğrafları birleştircez.
    sucess, imgWebcam = cap.read()
    imgAug = imgWebcam.copy()
    # burada key points yani böyle önemli bölgeler, köşeler gibi yerleri beliriliyoruz.
    kp2, des2 = orb.detectAndCompute(imgWebcam,
                                     None)  # imgwebcami myvid yapıp değiştir o zaman oldu .d tek seferliktir belki?
    # imgWebcam = cv2.drawKeypoints(imgWebcam, kp2, None)

    if detection == False:
        myVid.set(cv.CAP_PROP_POS_FRAMES, 0)
        frameCounter = 0
    else:
        if frameCounter == myVid.get(cv.CAP_PROP_FRAME_COUNT):
            myVid.set(cv.CAP_PROP_POS_FRAMES, 0)
            frameCounter = 0
        success, imgVideo = myVid.read()
        imgVideo = cv.resize(imgVideo, (wT, hT))

    # burada ise matches yani webcam resmi ile fotoğrafımız arasındaki benzerlikleri alıyoruz.
    bf = cv.BFMatcher()
    matches = bf.knnMatch(des1, des2, k=2)
    good = []
    for m, n in matches:
        if m.distance < 0.75 * n.distance:
            good.append(m)
    print(len(good))
    imgFeatures = cv.drawMatches(imgTarget, kp1, imgWebcam, kp2, good, None, flags=2)

    if len(good) > 20:  # burada eğer anahtar bölgelerimiz 20 den fazla şekilde uyuşuyorsa, tanımlama(detection) tamamlanmış oluyor.
        detection = True
        srcPts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
        dstPts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
        matrix, mask = cv.findHomography(srcPts, dstPts, cv.RANSAC, 5)
        print(matrix)

        # eşleşine resmin etrafını çiziyoruz
        pts = np.float32([[0, 0], [0, hT], [wT, hT], [wT, 0]]).reshape(-1, 1, 2)
        dst = cv.perspectiveTransform(pts, matrix)
        img2 = cv.polylines(imgWebcam, [np.int32(dst)], True, (255, 0, 255), 3)

        # burada videomuzu, webcam resmimiz ile aynı boyuta getiriyoruz.
        imgWarp = cv.warpPerspective(imgVideo, matrix, (imgWebcam.shape[1], imgWebcam.shape[0]))
        cv.imshow("imgWarp", imgWarp)
        cv.waitKey(0)

我的网络摄像头有问题吗?但它也适用于其他代码或应用程序。为什么会出现此错误以及如何解决它?

如果您想连接默认网络摄像头,通常初始化为:

myVid = cv.VideoCapture(0)

如果您想连接到外部设备,可以使用 1、2 等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV-(-215:断言失败) _src.total() > 0 函数 'cv::warpPerspective' 的相关文章

随机推荐

  • 命名空间 clr-namespace <...> 中不存在名称 <...>

    我有一个小型 WPF 应用程序 过去可以正常编译 但现在不行了 我真的不能说它在哪一点停止了建设 前一天还好好的 第二天就不行了 这是项目结构 除了标准 net dll 之外 没有其他项目或外部引用 这是问题产生的用户控件
  • 在 C# 中定义 get 或 set

    朋友们 我在 C 类中使用 get 或 set 时遇到问题 当我使用 get 或 set 时给出错误 类中的无效令牌 请参阅下面的代码 我有这个问题 static int abcd get return abcd thanx 这是完整的代码
  • 使用自动增量字段插入触发器之前/之后

    我在使用插入触发器时遇到问题 该触发器应该修复表中的列 id auto increment int thread id int NULL 我想要实现的是设置thread id to id如果它被插入为 NULL 我失败了 因为 using
  • 如何给 ImageView 赋予六边形形状

    如何赋予六边形形状ImageView 可以用同样的方式做吗 如果是这样那怎么办 如果这不可能通过此方法实现 那么如何实现呢
  • 如何让k8s cpu和内存HPA协同工作?

    我正在使用 k8s HPA 模板作为 CPU 和内存 如下所示 apiVersion autoscaling v1 kind HorizontalPodAutoscaler metadata name Chart Name cpu labe
  • 检索任意日期之前/之后最后更新的属性

    我有兴趣检索 WikiData 项目的属性 但前提是该属性是在某个日期之前或之后添加或修改的 所以我有这个SPARQL查询获取 Q24 的所有属性 SELECT itemLabel propLabel statement property
  • 是否可以在 Rust for 循环中声明变量的类型?

    C 示例 for long i 0 i lt 101 i 在 Rust 中我尝试过 for i i64 in 1 100 我可以轻松地声明一个let i i64 for循环之前的var 但我宁愿学习正确的方法来做到这一点 但这导致 erro
  • 在 JavaScript 中正确引用 ASP.NET 用户控件中的控件

    我有一个 ASP NET 用户控件 其中包含一个文本框控件和一个按钮控件 该用户控件将多次添加到我的网页中 我需要一段 JavaScript 只要文本框发生更改就会运行 并在文本框的值无效时禁用按钮 我的问题是 如何将 JavaScript
  • b 表中的 BootstrapVue 条件列

    如果当前用户是管理员 我只想显示我的专栏之一 我不知道如何使用 bootstrapVue 来做到这一点 有任何想法吗 这是基于 Troy 评论的片段 我已向名为的字段对象添加了一个自定义属性requiresAdmin 这不是标准的一部分Bo
  • 通过 bash 脚本与多个目录中的文件交互

    我生成了一个迭代多个 csv 文件的脚本 将相关文件转换为 UTF 8 bin bash cd home user prod charset text plain charset iso 8859 1 for file in csv do
  • 如何将字符串放入整数数组C++

    我有一个字符串 其中包含用户输入的内容 string userstr cout lt lt Please enter a string getline cin userstr 然后将该字符串存储在 userstr 中 然后我希望将该字符串存
  • 限制mysql中连接的行数

    因此 我想将两个表连接在一起 但对于第一个表中的每一行 我只想将其连接到另一个表中的前 8 个匹配行 并按该表中的一列排序 我可以使用任何聪明的语法 还是我需要弄乱子查询 看一下 如何在 SQL 中选择每组的第一个 最小 最大行 Secti
  • 如何将多个参数绑定到 MySQLi 准备好的语句

    我有可变数量的参数要插入 但出现错误 2031 No data supplied for parameters in prepared statement警告后Number of variables doesn t match number
  • 导入mysql数据中断,如何恢复?

    我使用导入了一个大型mysql数据库 mysql uroot ppassword dbName 数据库在处理过程中消失了 可能是由于几天后超时 有办法恢复吗 或者我运气不好 需要删除现有的数据库并重新导入 在命令行上使用 ignore 选项
  • 每行阅读 PDF

    如何阅读 PDF 文件line by line使用 iText5 for NET 我在互联网上搜索过 但我只找到了每页内容阅读 PDF 文件 请看下面的代码 public string ReadPdfFile object Filename
  • 如何使用 grid.arrange 排列任意数量的 ggplot?

    这是交叉发布在 ggplot2 谷歌组上的 我的情况是处理一个函数输出任意数量的图 取决于用户提供的输入数据 该函数返回 n 个图的列表 我想将这些图以 2 x 2 的形式排列 我正在努力解决以下同时存在的问题 我怎样才能灵活地获得任意 n
  • 如何使用git命名空间隐藏分支

    背景 我正在与一个大型团队合作 使用git用于版本控制 正常流程是 人们从 积压队列 中选择一张票 通过当地分支机构 即git checkout b my feature branch 进行多次提交 即git commit 将本地更改推送到
  • Firebase 令牌验证

    我有一个 PHP 后端和一个 Android 客户端 使用客户端 用户可以使用 Google 或 Facebook 均通过 Firebase 登录我的应用程序 我从以下位置获取令牌FirebaseUser并将其发送到我的服务器 很简单 第一
  • MongoDB 订单/销售聚合组每月总和 + 计数字段

    谁知道更好的解决方案来按日期和总计对订单进行分组并按来源进行计数 当然 我可以按来源分组 然后我仅获得该来源的总计 之后我可以更改结果以获得所需的结果 但我想知道是否可以通过一种简单的方式 group陈述 Eg ordersByApp 1
  • OpenCV-(-215:断言失败) _src.total() > 0 函数 'cv::warpPerspective'

    我的完整代码 import cv2 as cv import numpy as np cap cv VideoCapture 0 cv CAP DSHOW imgTarget cv imread photos TargetImage jpg