尝试跟着做: Opencv项目实战: 你这背景太假啦!

参考文章: Opencv项目实战:12 你这背景太假啦!_夏天是冰红茶的博客-CSDN博客

看到一个项目,感觉挺有趣,而且简单,尝试跟着做一次..

一:

打开cmd,安装库

下载cvzone的包:

pip install cvzone

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第1张图片

安装完成尝试跟着做: Opencv项目实战: 你这背景太假啦!_第2张图片

二:

打开编辑器,(这里用的python自带的)

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第3张图片

创建新文件

 尝试跟着做: Opencv项目实战: 你这背景太假啦!_第4张图片

 复制代码

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第5张图片

运行报错

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第6张图片

更新
python -m pip install --upgrade pip

加了 
pip isntall --user deeplabcut就好了

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第7张图片

 运行依旧相同报错, 完全关闭ide,重新打开运行正确.

新报错

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第8张图片

 改成全英文路径还是报错,

尝试多次无果,准备新建文件进行试验

修改代码 #(0)是笔记本摄像头(1)是外接摄像头

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第9张图片

 

更新报错

尝试跟着做: Opencv项目实战: 你这背景太假啦!_第10张图片

 发现是路径错误,多了个'/'

最终可运行代码

import cv2
import cvzone
import os
from cvzone.SelfiSegmentationModule import SelfiSegmentation

cap=cv2.VideoCapture(0)    #(0)是笔记本摄像头(1)是外接摄像头
cap.set(3,640)
cap.set(4,480)
cap.set(cv2.CAP_PROP_FPS,60)  #帧速率
segmentor=SelfiSegmentation()
fpsReader =cvzone.FPS()


listimg=os.listdir("Images")
print(listimg)
imglist = []
for imgpath in listimg:
    #img=cv2.imread(f'C:/Project/_PythonProject/backgroundfake/Images/{imgpath}/')
    img=cv2.imread(f'Images/{imgpath}')
    imglist.append(img)
print(len(imglist))

indeximg = 0

while 1:
    reg,img=cap.read()
    imgout = segmentor.removeBG(img,imglist[indeximg],threshold=0.8)

    imgstacked=cvzone.stackImages([img,imgout],2,1)
    fps,imgstacked=fpsReader.update(imgstacked,color=(0,0,255))
    print(indeximg)
    #cv2.imshow("Imagestacked",imgstacked)
    cv2.imshow("image",imgstacked)
    key=cv2.waitKey(1)
    if key & 0xFF == 27:
        break
    elif key == ord('q'):
        if indeximg>0:
            indeximg -=1
    elif key == ord('w'):
        if indeximg

最终可运行代码(找bug的时候找到的,也能运行)

import cv2
import cvzone
from cvzone.SelfiSegmentationModule import SelfiSegmentation
import os

cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
# cap.set(cv2.CAP_PROP_FPS, 60)  #帧速率?
segmentor = SelfiSegmentation()
fpsReader = cvzone.FPS()

# imgBG = cv2.imread("BackgroundImages/3.jpg")
listImg = os.listdir("Images/")
imgList = []
for imgPath in listImg:
   img = cv2.imread(f'Images//{imgPath}')
   imgList.append(img)
   
indexImg = 0

while True:
   success, img = cap.read()
   # imgOut = segmentor.removeBG(img, (255,0,255), threshold=0.83)
   imgOut = segmentor.removeBG(img, imgList[indexImg], threshold=0.8)
   
   imgStack = cvzone.stackImages([img, imgOut], 2,1)
   _, imgStack = fpsReader.update(imgStack)
   print(indexImg)
   cv2.imshow("image", imgStack)
   key = cv2.waitKey(1)
   if key == ord('a'):
       if indexImg>0:
           indexImg -=1
   elif key == ord('d'):
       if indexImg

你可能感兴趣的:(python,opencv,python,人工智能)