我正在尝试使用 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) UNET架构就像前半编码器和后半解码器。自动编码器有不同的变体,如稀疏、变分等。它们都压缩和解压缩数据,但 UNET 也同样用于压缩和解压缩。就我而言,我认为在简单的自动编码器中我们不使用 Transpose2D 卷积,但在 UNET 中我们使用这种上采样。在简单的自动编码器中,我们不使用 Transpose2D Conv 。上采样是如何发生的?如果我们在自动编码器中使用 Transpose2D,它与 UNET 有何不同?
artificial-intelligence autoencoder deep-learning semantic-segmentation unet-neural-network
我是初学者,我正在尝试将轮廓应用到左侧的白色遥控器上,该遥控器与背景颜色相同。

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
我正在尝试从车牌中获取字符。但很少有错误的预测,比如
我得到的输出为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) 我正在使用以下 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。我还缺少什么?
我收到错误:symbol not found in flat namespace '_png_do_expand_palette_rgb8_neon'
尽管dlib已安装相关 Python 版本的包,但仍会发生错误。
我正在使用 VSCode,以防相关。
我用于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) 我正在处理二进制图像,之前使用此代码来查找二进制图像中的最大区域:
# 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)
这段代码并没有真正完成我需要它做的事情,现在我认为最好提取二进制图像中最中心的区域。
这就是代码目前正在提取的内容,但我希望能够获得提取的第一个二进制图像中的中心圆。
我尝试用cuda编译Opencv,但出现错误
运行:
我不知道它从哪里来...
[ 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 …
我正在树莓派上编写一些 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)