小编Chr*_*itz的帖子

opencv无法保存视频

我正在尝试使用 opencv 写入方法保存视频,但视频保存为 0 kb。我的代码出了什么问题。

import cv2

cap = cv2.VideoCapture("k1.mp4")
# assert cap.isOpened()
fgbg = cv2.bgsegm.createBackgroundSubtractorMOG()
fourcc = cv2.VideoWriter_fourcc(*'MP42')
out = cv2.VideoWriter('output.mp4', fourcc, 20.0, (640,480))
# assert out.isOpened()

while cap.isOpened():
    ret, frame = cap.read()
    # if not ret: break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    fgmask = fgbg.apply(gray)
    thresh = 2
    maxValue = 255
    ret, th1 = cv2.threshold(fgmask, thresh, maxValue, cv2.THRESH_BINARY)

    color_space = cv2.applyColorMap(th1, cv2.COLORMAP_JET)
    result_vid = cv2.addWeighted(frame, 0.7, color_space, 0.7, 0)

    out.write(result_vid)

    cv2.imshow("vid", result_vid)
    if cv2.waitKey(20) == ord('q'):
        break

cap.release()
out.release() …
Run Code Online (Sandbox Code Playgroud)

python video opencv

3
推荐指数
1
解决办法
5628
查看次数

UNET 与简单的自动编码器有何不同?

UNET架构就像前半编码器和后半解码器。自动编码器有不同的变体,如稀疏、变分等。它们都压缩和解压缩数据,但 UNET 也同样用于压缩和解压缩。就我而言,我认为在简单的自动编码器中我们不使用 Transpose2D 卷积,但在 UNET 中我们使用这种上采样。在简单的自动编码器中,我们不使用 Transpose2D Conv 。上采样是如何发生的?如果我们在自动编码器中使用 Transpose2D,它与 UNET 有何不同?

artificial-intelligence autoencoder deep-learning semantic-segmentation unet-neural-network

3
推荐指数
1
解决办法
1万
查看次数

如何检测与背景融合的物体?

我是初学者,我正在尝试将轮廓应用到左侧的白色遥控器上,该遥控器与背景颜色相同。 在此输入图像描述

a = cv2.imread(file_name)
imgGray = cv2.cvtColor(a,cv2.COLOR_BGR2GRAY)

imgGray = cv2.GaussianBlur(imgGray,(11,11),20)

k5 = np.array([[-1,-1,-1],[-1,9,-1],[-1,-1,-1]])
imgGray = cv2.filter2D(imgGray,-1,k5)

cv2.namedWindow("Control")
cv2.createTrackbar("blocksize","Control",33,1000,f)
cv2.createTrackbar("c","Control",3,100,f)
while True:
    strel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
    blocksize = cv2.getTrackbarPos("blocksize","Control")
    c = cv2.getTrackbarPos("c","Control")

    if blocksize%2==0:
        blocksize += 1
    thrash = cv2.adaptiveThreshold(imgGray,255,cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV,blockSize=blocksize,C=c)
    thrash1 = cv2.adaptiveThreshold(imgGray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,blockSize=blocksize,C=c)

    cv2.imshow("mean",thrash)
    cv2.imshow("gaussian",thrash1)
    #r,thrash = cv2.threshold(imgGray,150,255,cv2.THRESH_BINARY_INV)
    key = cv2.waitKey(1000)
    if key == 32 or iter == -1:
         break


edges = cv2.Canny(thrash,100,200)
cv2.imshow('sharpen',sharpen)
cv2.imshow('edges',edges)
cv2.imshow('grey ',imgGray)
cv2.imshow('thrash ',thrash)
cv2.waitKey(0)
circles = cv2.HoughCircles(imgGray,cv2.HOUGH_GRADIENT,1,60,param1=240,param2=50,minRadius=0,maxRadius=0)
contours,_ = cv2.findContours(thrash,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
putlabel(circles,a,contours)
Run Code Online (Sandbox Code Playgroud)

这些是我尝试过的,我也尝试过形态学操作,如膨胀、腐蚀、开闭,但我仍然无法获得结果。

下面是我的最佳结果,但噪音太严重,而且遥控器的轮廓也没有完全清晰。 在此输入图像描述

python opencv image-processing computer-vision image-thresholding

3
推荐指数
1
解决办法
3716
查看次数

如何提高 EasyOCR 的准确性/预测?

我正在尝试从车牌中获取字符。但很少有错误的预测,比如

在此输入图像描述

我得到的输出为UP74 BD 3465,这是错误的。有许多B预测的例子8以及更多。

  • 如何提高其准确率?
  • 如何预处理图像以获得正确的预测或任何其他方法?
import matplotlib.pyplot as plt
import easyocr
from pylab import rcParams
from IPython.display import Image

rcParams['figure.figsize'] = 8, 16
reader = easyocr.Reader(['en'])

output = reader.readtext(path)
for i in range(len(output)):
    print(output[i][-2])
Run Code Online (Sandbox Code Playgroud)

python ocr text-extraction image-processing easyocr

2
推荐指数
1
解决办法
9531
查看次数

在 Mac m1 中从源代码构建 opencv

我正在使用以下 Make 从源代码构建 OpenCV,

 cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D OPENCV_EXTRA_MODULES_PATH=/Users/Tools/opencv_contrib/modules \
  -D PYTHON3_EXECUTABLE=/miniforge/base/envs/envname/bin/python3 \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D WITH_TBB=ON \
    -D WITH_V4L=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_OPENGL=ON \
     -DBUILD_ZLIB=OFF \
  -D OPENCV_EXTRA_MODULES_PATH=/Users/Tools/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..
Run Code Online (Sandbox Code Playgroud)

不幸的是它没有构建。它抛出以下错误,

: error: unknown type name 'AVBSFContext'; did you mean 'AVIOContext'?
Run Code Online (Sandbox Code Playgroud)

我当然已经安装了FFmpeg。我还缺少什么?

c++ opencv ffmpeg cmake apple-m1

2
推荐指数
1
解决办法
2008
查看次数

如何修复 python `dlib` 错误:“在平面命名空间 '_png_do_expand_palette_rgb8_neon' 中找不到符号”?

我收到错误:symbol not found in flat namespace '_png_do_expand_palette_rgb8_neon' 尽管dlib已安装相关 Python 版本的包,但仍会发生错误。

我正在使用 VSCode,以防相关。

谁能帮我修复这个错误吗? 在此输入图像描述

python dlib

2
推荐指数
1
解决办法
4384
查看次数

cv2 中的可变 fps(每秒帧数)

我用于cv2从我拥有的不同帧创建视频。创建视频时,我无法更改 fps(每秒帧数)。我希望视频在开始时较慢,但到结束时较快,这意味着开始时的 fps 较小,但到最后时较大。但是,当我实例化时,cv2.VideoWriter我无法再更改 fps。我应该怎么办?

可复制的代码

import numpy as np
import cv2, os
import matplotlib

image_size = 200
def create_image_array(image_size):
  image_array = np.random.randn(image_size, image_size)
  row = np.random.randint(0, image_size)
  image_array[row, :] = 100
  return image_array

frame_numbers = 200
for i in range(frame_numbers):
  image_array = create_image_array(image_size)
  matplotlib.image.imsave(f'./shots/frame_{i:03d}.png', image_array)

def make_a_video(shots_folder, video_path):

    shots_folder = 'shots'
    fps = 25
    images = [img for img in os.listdir(shots_folder) if img.endswith(".png")]

    images = sorted(images)[:]
    frame = cv2.imread(os.path.join(shots_folder, images[0]))
    height, width, layers = frame.shape …
Run Code Online (Sandbox Code Playgroud)

python opencv ffmpeg video-processing computer-vision

2
推荐指数
1
解决办法
1483
查看次数

提取二值图像中的最中心区域

我正在处理二进制图像,之前使用此代码来查找二进制图像中的最大区域:

# Use the hue value to convert to binary
thresh = 20
thresh, thresh_img = cv2.threshold(h, thresh, 255, cv2.THRESH_BINARY)
cv2.imshow('thresh', thresh_img)
cv2.waitKey(0) 
cv2.destroyAllWindows()                        
# Finding Contours
# Use a copy of the image since findContours alters the image

contours, _ = cv2.findContours(thresh_img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

#Extract the largest area
c = max(contours, key=cv2.contourArea) 
Run Code Online (Sandbox Code Playgroud)

这段代码并没有真正完成我需要它做的事情,现在我认为最好提取二进制图像中最中心的区域。

二值图像 最大图像

这就是代码目前正在提取的内容,但我希望能够获得提取的第一个二进制图像中的中心圆。

python opencv image-processing binary-image

2
推荐指数
1
解决办法
514
查看次数

使用 CUDA 12 构建 OpenCV,未定义标识符 cudaUnbindTexture、textureReference

我尝试用cuda编译Opencv,但出现错误

运行:

  • nvidia-驱动程序-525.60.13
  • CUDA 12.0
  • OpenCV 3.4.16

我不知道它从哪里来...

[  7%] Building CXX object 3rdparty/protobuf/CMakeFiles/libprotobuf.dir/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc.o
/home/totar/cv2/opencv-3.4.16/modules/cudev/include/opencv2/cudev/ptr2d/texture.hpp(61): error: texture is not a template

/home/totar/cv2/opencv-3.4.16/modules/cudev/include/opencv2/cudev/ptr2d/texture.hpp(83): error: identifier "cudaUnbindTexture" is undefined

/home/totar/cv2/opencv-3.4.16/modules/core/include/opencv2/core/cuda/common.hpp(99): error: identifier "textureReference" is undefined

3 errors detected in the compilation of "/home/totar/cv2/opencv-3.4.16/modules/core/src/cuda/gpu_mat.cu".
CMake Error at cuda_compile_1_generated_gpu_mat.cu.o.Release.cmake:279 (message):
  Error generating file
  /home/totar/cv2/opencv-3.4.16/build/modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/./cuda_compile_1_generated_gpu_mat.cu.o


modules/core/CMakeFiles/opencv_core.dir/build.make:63: recipe for target 'modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o' failed
make[2]: *** [modules/core/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_gpu_mat.cu.o] Error 1
CMakeFiles/Makefile2:1889: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
Run Code Online (Sandbox Code Playgroud)

nvcc --version …

opencv cuda cmake

2
推荐指数
1
解决办法
3836
查看次数

为什么在线程内抓取图像帧速度较慢

我正在树莓派上编写一些 Python 代码,以使用 openCV 从 RPi 相机抓取图像帧。如果代码位于简单的 while 循环中,则它可以毫无问题地实时运行。但是,我想将相机的操作放在一个线程中,以便相机可以在后​​台运行,并在需要时抓取帧。结果,我做了相当于下面的简单相机类的事情。

import cv2
class cam:
    def __init__(self):        
        self.cap = cv2.VideoCapture(0)
        #Create an empty image frame in case camera is not started before frame is used
        self.frame = np.zeros([cam_mode.width,cam_mode.height,3],dtype=np.uint8)
        
        #Objects for threading
        self.cam_thread = Thread(target=self.camera_thread,args=())
        self._lock = Lock()
        
    def start_camera(self):
        
        self.cam_thread.daemon = True
        self.cam_thread.start()
        
    def camera_thread(self):
        if not self.is_running:
            raise Exception("Camera is not running")
        while self.cont:
            #Lock so getting image is protected
            with self._lock:
                # get the image
                status, frame = self.cap.read()                
                if …
Run Code Online (Sandbox Code Playgroud)

python multithreading opencv

2
推荐指数
1
解决办法
147
查看次数