OpenCV-(-215:断言失败) _src.total() > 函数中的 0 'cv::warpPerspective'
OpenCV-(-215:Assertion failed) _src.total() > 0 in function 'cv::warpPerspective'
我的完整代码:
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 参数。但在那一行中,它给出了错误:
error: OpenCV(4.0.1)
C:\ci\opencv-suite_1573470242804\work\modules\imgproc\src\imgwarp.cpp:2903:
error: (-215:Assertion failed) _src.total() > 0 in function
'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
的 sep
,它将适用于所有 OS。
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)
您还可以使用 imshow
显示 imgWarp
cv.imshow("imgWarp", imgWarp)
cv.waitKey(0)
示例输出:
代码:
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)
Is there any problem about my webcam? But it works in other codes, or in applications also. Why that this error occures and how can I solve it?
如果你想连接你的默认网络摄像头,通常你初始化为:
myVid = cv.VideoCapture(0)
如果您想连接到您的外部设备,您可以使用 1、2 等。
我的完整代码:
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 参数。但在那一行中,它给出了错误:
error: OpenCV(4.0.1) C:\ci\opencv-suite_1573470242804\work\modules\imgproc\src\imgwarp.cpp:2903: error: (-215:Assertion failed) _src.total() > 0 in function '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
的 sep
,它将适用于所有 OS。
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)
您还可以使用 imshow
imgWarp
cv.imshow("imgWarp", imgWarp)
cv.waitKey(0)
示例输出:
代码:
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)
Is there any problem about my webcam? But it works in other codes, or in applications also. Why that this error occures and how can I solve it?
如果你想连接你的默认网络摄像头,通常你初始化为:
myVid = cv.VideoCapture(0)
如果您想连接到您的外部设备,您可以使用 1、2 等。