Python OpenCV-(-215:断言失败)\u src.total();函数'中的0;cv::warpPerspective';

Python OpenCV-(-215:断言失败)\u src.total();函数'中的0;cv::warpPerspective';,python,opencv,opencv-python,Python,Opencv,Opencv Python,我的完整代码: 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()

我的完整代码:

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]))
我还将我的所有代码复制到我的页面顶部,因为它可能是需要的

我的网络摄像头有问题吗?但它也适用于其他代码或应用程序。发生此错误的原因以及如何解决


我在等待你的帮助。。。任何建议都将是解决此问题的一大好处。

让我从您的代码的一个小改动开始

使用
\
分隔符初始化时,代码将仅适用于Windows

imgTarget=cv.imread('photos\TargetImage.jpg')#bu resmimiz
myVid=cv.VideoCapture('photos\video.mp4')
如果您使用
os.path
sep
,它将在所有操作系统上工作

从os.path导入sep
imgTarget=cv.imread('photos'+sep+'TargetImage.jpg')#bu resmimiz
myVid=cv.VideoCapture('photos'+sep+'video.mp4')
我建议您使用默认分辨率并将
cap
变量初始化为:

cap=cv.VideoCapture(0)
您还可以使用
imshow

cv.imshow(“imgWarp”,imgWarp)
cv.waitKey(0)
输出示例:

代码:


将cv2作为cv导入
将numpy作为np导入
从os.path导入sep
cap=cv.VideoCapture(0)
imgTarget=cv.imread('photos'+sep+'TargetImage.jpg')#bu resmimiz
myVid=cv.VideoCapture('photos'+sep+'video.mp4')
检测=错误
帧计数器=0
#imgVideo=cap.read()
成功,imgVideo=myVid.read()
hT、wT、cT=imgTarget.shape#burada resmimizin yüksekliğini,kalınlğğnıgenişliğini falan alıyoruz。
''当我的视频被激活时():
成功,Video=myVid.read()
如果成功:
视频=cv.调整大小(视频,(wT,hT))“”
#burada的关键点是亚尼·博伊尔·涅姆利·博格勒、凯勒·吉比·耶勒里·贝里约鲁兹。
orb=cv.orb_创建(nfeatures=1000)
kp1,des1=orb.detectAndCompute(imgTarget,None)
而myVid.Isoped():#burada网络摄像头ile fotoğraflarıbirleştircez。
成功,imgWebcam=cap.read()
imgauge=imgWebcam.copy()
#burada的关键点是亚尼·博伊尔·涅姆利·博格勒、凯勒·吉比·耶勒里·贝里约鲁兹。
kp2,des2=天体探测和计算(imgWebcam,
没有)imgwebcami myvid yapıp değiştir o zaman Old d d tek seferliktir belki?
#imgWebcam=cv2.绘图关键点(imgWebcam,kp2,无)
如果检测==错误:
我的视频集(cv.CAP\U PROP\U POS\U帧,0)
帧计数器=0
其他:
如果frameCounter==myVid.get(cv.CAP\u PROP\u FRAME\u COUNT):
我的视频集(cv.CAP\U PROP\U POS\U帧,0)
帧计数器=0
成功,imgVideo=myVid.read()
imgVideo=cv.调整大小(imgVideo,(wT,hT))
#burada ise匹配亚尼网络摄像头resmi ile fotoğrafımız arasındaki benzerlikleri alıyoruz。
bf=cv.BFMatcher()
匹配=bf.knnMatch(des1,des2,k=2)
好的=[]
对于匹配中的m,n:
如果m.距离<0.75*n.距离:
好。追加(m)
印刷品(透镜(良好))
imgFeatures=cv.drawMatches(imgTarget,kp1,imgWebcam,kp2,good,None,flags=2)
如果len(良好)>20:burada eğer anahtar bölgelerimiz 20 den fazlaşekilde uyuşuyorsa,tanımlama(检测)tamamlanmşoluyor。
检测=真
srcPts=np.float32([kp1[m.queryIdx].pt表示m处于良好状态])。重塑(-1,1,2)
dstPts=np.float32([kp2[m.trainIdx].pt表示m处于良好状态])。重塑(-1,1,2)
矩阵,掩码=cv.findHomography(srcPts,dstPts,cv.RANSAC,5)
打印(矩阵)
#埃雷斯明·伊兹约鲁兹
pts=np.float32([[0,0],[0,hT],[wT,hT],[wT,0]])。重塑(-1,1,2)
dst=cv透视变换(pts,矩阵)
img2=cv.多段线(imgWebcam[np.int32(dst)],真,(255,0255),3)
#burada videomuzu,网络摄像机resmimiz ile aynıboyuta getiriyoruz。
imgWarp=cv.warpPerspective(imgVideo,矩阵,(imgWebcam.shape[1],imgWebcam.shape[0]))
简历imshow(“imgWarp”,imgWarp)
cv.waitKey(0)
我的网络摄像头有问题吗?但它也适用于其他代码或应用程序。发生此错误的原因以及如何解决

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

myVid=cv.VideoCapture(0)

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

谢谢您的回复,我很快就会尝试,然后我会回到这里,非常感谢您,我的朋友……它真的很管用。再次问,我可以通过edditing我的问题,以不同的代码问相同的错误吗?我更改了一些代码(不是太多),并给出了相同的错误。编辑完我的问题后,你会再看一遍吗?或者我应该打开一个新的问题这取决于你,但如果我是你,我会问一个新的问题,因为如果你添加一个新的代码,它会变得混乱。因此,我建议发布一个新问题,但当然你会认为你是对的,但有一个小问题:为什么GIF图像在opencv中没有形状?
imgWarp = cv.warpPerspective(imgVideo,matrix, (imgWebcam.shape[1],imgWebcam.shape[0]))