OpenCV way to explore 2025-10-23T18:34:26Z Copyright © 2010-2018, V2EX 目标检测,计算出旋转速度和加速度,有人精通吗?急 tag:www.v2ex.com,2025-10-23:/t/1167987 2025-10-23T13:56:35Z 2025-10-23T18:34:26Z ydt0728 member/ydt0728 轮盘游戏。固定的角度录制有 10 万次结果。 根据这些完整数据,能预测出白球是落在左边还是右边吗? 我查阅了一些资料 国外有很多人做过这些研究。理论上是可行的。

相关资料 使用 OpenCV 二进制掩码检测轮盘和球速 https://www.linkedin.com/pulse/roulette-wheel-ball-speed-detection-opencv-binary-mask-muhammad-anas-nqy4f

https://www.youtube.com/watch?v=bpy933SQ6Q0 https://www.youtube.com/watch?v=kibZDD_I9HY https://www.youtube.com/watch?v=HaMlKvNqCVs https://www.spinsight.ai/

]]> opencv 图像动态融合问题 tag:www.v2ex.com,2024-09-12:/t/1072243 2024-09-12T03:09:55Z 2024-09-12T05:03:31Z kxg3030 member/kxg3030 在使用 pyqt+opencv 处理动态图像融合然后做路径规划,但图像特征融合的时候,已经融合的部分会越来越模糊,颜色也会变深,有没什么办法可以解决的

]]>
请问一个关于 OpenCV 手眼标定(cv::calibrateHandEye)获取相机安装参数的问题 tag:www.v2ex.com,2024-07-25:/t/1060154 2024-07-25T15:05:14Z 2024-07-31T19:18:30Z DIMOJANG member/DIMOJANG 我有一台固定在云台上的相机,我想要知道这个相机相对安装平台的旋转和平移量。其中云台是固定不动的,只有 pitch 、yaw 、和 roll 轴的运动。查了一下应该是用这个函数:

void calibrateHandEye( InputArrayOfArrays R_gripper2base, // 云台 p y r 角度转换出来的旋转矩阵 InputArrayOfArrays t_gripper2base, // 输入的是 0 ,因为没有任何移动(并且想用云台平台当世界坐标中心点) InputArrayOfArrays R_target2cam, // calibrateCamera 输出的 rvec InputArrayOfArrays t_target2cam, // calibrateCamera 输出的 tvec OutputArray R_cam2gripper, OutputArray t_cam2gripper, HandEyeCalibrationMethod method = CALIB_HAND_EYE_TSAI) 

我现在是这样做的:

  1. 将云台的 p y r 旋转到不同角度,拍摄棋盘格的照片,同时记录该时刻的 p y r 角旋转角度;
  2. 使用 calibrateCamera 得到每一张图片里棋盘格的 tvec 和 rvec ;
  3. 将记录的云台 p y r 角度转换为旋转矩阵;
  4. 调用 calibrateHandEye 。

但是结果和实际相差巨大。因此想来 V 站看看有没有人有过这方面经验,能看出我的步骤里可能有什么问题……先在这里谢过各位了!


我个人感觉比较容易出问题的地方是第三步的转换,我是这样写的:

 Eigen::Quaternionf euler2quaternionf(const float z, const float y, const float x) { const float cos_z = cos(z * 0.5f), sin_z = sin(z * 0.5f), cos_y = cos(y * 0.5f), sin_y = sin(y * 0.5f), cos_x = cos(x * 0.5f), sin_x = sin(x * 0.5f); Eigen::Quaternionf quaternion( cos_z * cos_y * cos_x + sin_z * sin_y * sin_x, cos_z * cos_y * sin_x - sin_z * sin_y * cos_x, sin_z * cos_y * sin_x + cos_z * sin_y * cos_x, sin_z * cos_y * cos_x - cos_z * sin_y * sin_x ); return quaternion; } 

先转换为四元数,再求旋转矩阵(用 Eigen 自带的方法)。

]]>
[求助]C++ 用到 OpenCV 库 怎么静态编译呢? tag:www.v2ex.com,2024-06-16:/t/1049921 2024-06-16T03:57:02Z 2024-06-20T06:49:46Z norkki member/norkki 请问 c++用怎样正确的静态编译呢? 目的是让编译的程序不在依赖 libopencv_*.so 文件

测试代码如下:

cv-test.cc

#include <opencv2/opencv.hpp> #include <iostream> int main(int argc, char** argv) { cv::Mat image = cv::imread("image.jpg"); if (image.empty()) { std::cout << "Error loading image!" << std::endl; return -1; } // cv::imshow("Image", image); std::cout << "size: " << image.cols << "x" << image.rows << std::endl; return 0; } 

c++ -o cv-test cv-test.cc -I/usr/local/opencv/include/opencv4/ -L/usr/local/opencv/lib64/ -lopencv_core -lopencv_imgcodecs

正常编译

加上 -static尝试静态编译 (opencv 是有编译静态库的/usr/local/opencv/lib64/libopencv_core.a)

c++ -o cv-test cv-test.cc -I/usr/local/opencv/include/opencv4/ -L/usr/local/opencv/lib64/ -lopencv_core -lopencv_imgcodecs -static

报错:

/usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(opencl_core.cpp.o): in function `opencl_check_fn(int)': /home/nick/github/opencv/modules/core/src/opencl/runtime/opencl_core.cpp:166: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `ipp::IwiImage::Release()': /home/nick/github/opencv/build/3rdparty/ippicv/ippicv_lnx/iw/include/iw++/iw_image.hpp:945: undefined reference to `iwAtomic_AddInt' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `ipp::IwiImage::~IwiImage()': /home/nick/github/opencv/build/3rdparty/ippicv/ippicv_lnx/iw/include/iw++/iw_image.hpp:813: undefined reference to `iwAtomic_AddInt' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `ipp::IwiImage::Release()': /home/nick/github/opencv/build/3rdparty/ippicv/ippicv_lnx/iw/include/iw++/iw_image.hpp:957: undefined reference to `iwiImage_Release' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `ipp::IwException::IwException(int)': /home/nick/github/opencv/build/3rdparty/ippicv/ippicv_lnx/iw/include/iw++/iw_core.hpp:133: undefined reference to `iwGetStatusString' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `cv::transpose(cv::_InputArray const&, cv::_OutputArray const&)': /home/nick/github/opencv/modules/core/src/matrix_transform.cpp:228: undefined reference to `ippicviTranspose_32f_C4R' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_core.a(matrix_transform.cpp.o): in function `ipp_transpose': /home/nick/github/opencv/modules/core/src/matrix_transform.cpp:228: undefined reference to `ippicviTranspose_32s_C3R' /usr/bin/ld: /home/nick/github/opencv/modules/core/src/matrix_transform.cpp:228: undefined reference to `ippicviTranspose_16s_C3R' ... /usr/bin/ld: /usr/local/opencv/lib64//libopencv_imgcodecs.a(grfmt_webp.cpp.o): in function `std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<unsigned char*, void (*)(void*), std::allocator<void>, void>(unsigned char*, void (*)(void*), std::allocator<void>)': /usr/include/c++/13/bits/shared_ptr_base.h:958: undefined reference to `WebPFree' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_imgcodecs.a(grfmt_webp.cpp.o): in function `cv::WebPEncoder::write(cv::Mat const&, std::vector<int, std::allocator<int> > const&)': /home/nick/github/opencv/modules/imgcodecs/src/grfmt_webp.cpp:286: undefined reference to `WebPEncodeLosslessBGRA' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_imgcodecs.a(grfmt_webp.cpp.o): in function `std::_Sp_ebo_helper<0, void (*)(void*), false>::_Sp_ebo_helper(void (*&&)(void*))': /usr/include/c++/13/bits/shared_ptr_base.h:482: undefined reference to `WebPFree' /usr/bin/ld: /usr/local/opencv/lib64//libopencv_imgcodecs.a(grfmt_webp.cpp.o): in function `cv::WebPEncoder::write(cv::Mat const&, std::vector<int, std::allocator<int> > const&)': /home/nick/github/opencv/modules/imgcodecs/src/grfmt_webp.cpp:271: undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)' /usr/bin/ld: /home/nick/github/opencv/modules/imgcodecs/src/grfmt_webp.cpp:293: undefined reference to `WebPEncodeBGR' /usr/bin/ld: /home/nick/github/opencv/modules/imgcodecs/src/grfmt_webp.cpp:297: undefined reference to `WebPEncodeBGRA' /usr/bin/ld: /home/nick/github/opencv/modules/imgcodecs/src/grfmt_webp.cpp:282: undefined reference to `WebPEncodeLosslessBGR' /usr/bin/ld: cv-test: hidden symbol `opj_stream_destroy' isn't defined /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status 

请问大佬有没有办法静态编译

]]>
opencv 去除视频中移动的文字 tag:www.v2ex.com,2024-06-04:/t/1046551 2024-06-04T01:18:43Z 2024-06-04T01:18:43Z anai1943 member/anai1943 如图所示,视频画面中会出现从左到右或者从下到上移动的文字,由于本机没有 N 卡(很多 AI 去除的开源项目需要 N 卡支持),打算先用 python + opencv 来试试,希望去除移动文字后,背景画面尽量不破坏。

目前的思路是先框选出来文字区域作为模板,再间隔几秒找一帧做模板匹配,如果匹配上,用相邻的未出现文字的帧的画面来替换有文字内容的帧,如果出现移动文字的画面也有其它移动的对象,这种方式就不行了,还有其它好的思路么,感谢!

这是图片 示意图 1

这是图片 示意图 2

]]>
Opencv 遇到一个很奇怪的问题, mac 上获取摄像头图片,必须需要 sleep 一下, 0.1 都可以,但是不给就是黑图,代码如下,有没有大佬指点一下 tag:www.v2ex.com,2024-04-15:/t/1032676 2024-04-15T08:44:35Z 2024-04-15T19:00:33Z Jinkeup member/Jinkeup def capture_photo(): # 打开摄像头 cap = cv2.VideoCapture(0)

# 检查摄像头是否打开成功 if not cap.isOpened(): raise Exception("Failed to open camera") # 图片为黑,必须 sleep 一下!!! sleep(0.1) # 读取一帧图像 ret, frame = cap.read() # 检查图像是否读取成功 if not ret: raise Exception("Failed to capture frame") # 释放摄像头 cap.release() # 保存图像到当前目录 cv2.imwrite("captured_photo.jpg", frame) return "Photo captured successfully" 
]]>
请教一个 opencv 算法,图片中检测圆形对象 tag:www.v2ex.com,2024-03-08:/t/1021666 2024-03-08T00:50:30Z 2024-03-08T03:40:23Z datadump member/datadump 图片发到 2 楼,大约 2000x2000 的图片,目标机器没有显卡。算法时间可以长一点,单张图片 10 秒也可以接受。

测了下霍夫算法,好像时间太长了,而且准确度也没法保障。

求一个思路( opencv 不太熟,里面好像有 svm,cnn,dnn 啥的不知道是否合适),万分感谢~~~

]]>
用 C++调用 OpenCV 的 matchTemplate 反而比 Python 更慢 tag:www.v2ex.com,2023-10-18:/t/983293 2023-10-18T14:43:46Z 2023-10-18T14:42:46Z cooljiang member/cooljiang 另外,除了 OpenCV 的 matchTemplate 方法外,是否有其他速度更快的模板匹配方法呢?
谢谢各位。 ]]>
mov 视频的图片如何转换? tag:www.v2ex.com,2023-06-14:/t/948756 2023-06-14T10:39:33Z 2023-06-14T10:37:33Z LuckyPocketWatch member/LuckyPocketWatch 视频是 iphone 录制的 mov 格式,现在需要对该视频中的第一帧做处理

cv::VideoCapture video; video.open("E:/20230612162536.MOV"); CV::Mat mat_1,mat_64F; video.read(mat_1); mat_1.converTo(mat_64F,CV_64F); cv::imshow("第一帧",mat_1); //正常显示了图片 cv::imshow("第一帧 64 位",mat_64F); //显示成纯白图片,大小和 mat_1 一样 

我现在需要确保这些图片都是 64 位浮点,所以使用了 converTo()转换,但转换之后就变成纯白图片了

我想问下,如何转换 mov 个数的某一帧,确保这一帧图片的数据类型是 64 位浮点?

]]>
大家有用过类似 PS Content-Aware Fill 抠图的库或源码吗(不限语言) tag:www.v2ex.com,2023-05-06:/t/937788 2023-05-06T02:56:17Z 2023-05-06T04:54:17Z LeegoYih member/LeegoYih 想要从照片中移除某个人物 /物品,目前使用了 OpenCV 的 inpaint ,效果不太理想:

11

]]>
nii 文件用 opencv 转换为 mp4 视频画面失真,求教 tag:www.v2ex.com,2023-02-12:/t/915327 2023-02-12T03:11:21Z 2023-02-12T03:11:21Z sugarkeek member/sugarkeek nii 是一个 4d 的医学 ct 图像,尺寸为(高,宽,深度,时间)。

我的预期是, 取时间和另外两个维度,转换为一个 mp4 格式的视频。

我的思路,先将 nii 图片转换一个 2 维的数组,然后顺序拼成一个视频。

但是实际, 转换出来的视频画面失真,win11 系统播放器打开画面失真,qq 影音播放器打开提示视频失效。

源文件和转换后的文件预览地址

https://1drv.ms/u/s!Ah4q2HtKB2AWg4NnYXaMslribNVlWw?e=D8ScIs

代码

 import os import cv2 import numpy as np def nii2imgs_dim(nii, dim) -> list: """ 将 nii 文件转换为多张图片,返回图片数组,不用中间保存,方便转换为视频 :param nii: nii 对象 :param dim: 要转换的维度 :return: 图片数组 """ imgs = [] data = nii for d3i in range(data.shape[3]): # 读取 3d 文件 d3img = data[:, :, :, d3i] # 获取 nii 文件的维度 d3img_shape = d3img.shape # 遍历每一张图片 for d2j in range(d3img_shape[2]): # 获取第 i 张图片 img = data[:, :, d2j, d3i] imgs.append(img) return imgs def imgs2mp4(img_list, save_path): """ 将图片数组转换为 mp4 :param img_list: 图片数组 :param save_path: 保存地址 :return: 空 """ # 判断 save_path 路径是否存在,如果不存在则创建 if not os.path.exists(save_path): os.makedirs(save_path) # 图片数组转换为 mp4 img, *imgs = img_list # *imgs 表示剩下的所有元素,img 表示第一个元素,目的是为了获取图片尺寸 print(img.shape) # img 转换为 float32 img = img.astype(np.float32) img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) height, width, layers = img.shape video = cv2.VideoWriter(save_path + "video.mp4", cv2.VideoWriter_fourcc(*'mp4v'), 1, (width, height)) video.write(img) for img in imgs: img = img.astype(np.float32) img = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) video.write(img) video.release() img = nib.load(file_path) data = img.get_fdata() # nii 转换为多张图片 imgs = nii2imgs_dim(data, 3) # 将图片数组转换为 mp4 imgs2mp4(imgs, "./tmp/") 
]]>
[求助] 如何确定点在曲线中的位置 tag:www.v2ex.com,2022-02-09:/t/832648 2022-02-09T03:51:03Z 2022-02-09T04:51:03Z fastdebuger member/fastdebuger 哇 期待很久的 计算机视觉 tag:www.v2ex.com,2021-10-14:/t/807744 2021-10-14T03:03:25Z 2021-10-13T00:50:10Z blurh11E27 member/blurh11E27 遇到很多问题
主要是用来做健身房核销会员
但是 实现起来 问题太多了 很多没办法解决 有同学一起来探讨嘛
v5324653
还有站长 是不是把我频闭了 我发不了主题了 ]]>
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86