编辑:跳到最后,看看我买了哪台相机.
对于大学项目,我必须拍摄半透明窗口,检测某些形状并将结果发送到另一台计算机.(帖子底部的示例图片)使用Win7中的OpenCV使用c ++进行检测.
我认为最简单的解决方案是将相机直接连接到计算机并在机器上进行计算.我需要至少20fps,分辨率为1280 x 1024可能足以进行检测.
我相对自由地决定使用哪种相机.您能否建议一款适用于OpenCV并且易于使用的相机?
这个问题已被问过几次,但大多数都没有答案或已经过时了:
推荐的高清摄像头(我发现最好的线程.建议使用logitech quickcam 9000 pro,不再在市场上销售)
哪家机器视觉供应商提供OpenCV支持(一般建议不知道该怎么做)
用于身体检测的相机(2010年,没有明确答案)
OpenCV网络摄像头兼容性(2011)
使用opencv测试的兼容相机列表(死链接,尚未找到副本)
Python中的工业相机(没有答案而不是我需要的)

编辑:仅供未来的读者使用:我们现在使用罗技HD Pro c920目前为70欧元.一个合适的"专业"相机将花费330欧元(没有镜头).
Edit2:使用它两个月后的一点点更新.
相机的角度小于官方论坛上传达的角度.这是一个SO问题,我上传了一些示例图片.
相机也只使用默认驱动程序以15 fps运行,因此请避免不惜一切代价安装它们!
此外,较新的型号(如我所得到的)粘在一起,因此您无法打开它们并轻松手动调整深度.
Edit3:只是最后一次更新.我的项目几乎完成,没有其他任何事情发生.:)
在OpenCV中绘制单个轮廓的最佳方法是什么?据我所知,drawContours只能处理多个轮廓.
背景:我想将每个循环的代码更改为a.旧代码:
//vector<vector<Point> > contours = result of findContours(...)
for (int i = 0; i < contour.size; i++){
if(iscorrect(contours[i])){
drawContours(img, contours, i, color, 1, 8, hierarchy);
}
}
Run Code Online (Sandbox Code Playgroud)
呈现的方式在这个邮件列表是相当难看:
for (vector<Point> contour : contours){
if(iscorrect(contour)){
vector<vector<Point> > con = vector<vector<Point> >(1, contour);
drawContours(img, con, -1, color, 1, 8);
}
}
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的方法来绘制单个轮廓(矢量<Point> Object)?
我在二维网格上有很多点.我想将点分组成对,同时最小化对之间的欧几里德距离的总和.
例:
Given the points:
p1: (1,1)
p2: (5,5)
p3: (1,3)
p4: (6,6)
Best solution:
pair1 = (p1,p3), distance = 2
pair2 = (p2,p4), distance = 1
Minimized total distance: 1+2 = 3
Run Code Online (Sandbox Code Playgroud)
我怀疑这个问题可以通过匈牙利算法的变体解决吗?
解决问题的最快方法是什么?
(小评论:我总是应该少于12分.)
algorithm mathematical-optimization linear-programming computational-geometry
我有问题理解的所有参数backgroundsubtractormog2.
我查看了代码(位于bfgf_gaussmix2.cpp),但没有看到与提到的文件的连接.例如,Tb = varThreshold,但论文中Tb的名称是什么?
我对脂肪标记的参数特别感兴趣.
让我们从easy参数[我的评论]开始:
int nmixtures
允许的最大混合物组分数.每个像素动态确定实际数量.[为GMG设置0]
uchar nShadowDetection
在输出前景蒙版中标记阴影像素的值.默认值为127.
漂浮fTau
影子阈值.如果像素是背景的较暗版本,则检测阴影.Tau是一个阈值,用于定义阴影的暗度.Tau = 0.5意味着如果一个像素的深度超过两倍,那么它就不是阴影.
现在对我不明白的人:
浮动backgroundRatio
定义组件是否足够重要以包含在背景模型中的阈值(对应于TB = 1-cf,来自论文?哪篇论文??).cf = 0.1 => TB = 0.9是默认值.对于alpha = 0.001,这意味着模式在被认为是前景之前应该存在大约105帧.
float varThresholdGen
平方Mahalanobis距离的阈值,有助于确定样品何时接近现有组件(对应于Tg).如果它不接近任何组件,则生成新组件.3 sigma => Tg = 3*3 = 9是默认值.Tg值越小,产生的组分越多.较高的Tg值可能导致少量组分,但它们可能会变得太大.[我不明白这个]
在构造函数中,使用变量varThreshold.它与varThresholdGen相同吗?
平方马哈拉诺比斯距离的阈值决定它是否被背景模型很好地描述(见Cthr ??).此参数不会影响后台更新.典型值可以是4西格玛,即varThreshold = 4*4 = 16; (见Tb ??).
float fVarInit
新生成的组件的初始方差.它影响适应的速度.参数值基于您对图像的典型标准偏差的估计.OpenCV使用15作为合理的值.
浮动fVarMin
用于进一步控制方差的参数.
浮动fVarMax
用于进一步控制方差的参数.
浮动fCT
复杂性降低参数.此参数定义接受证明组件存在所需的样本数.CT = 0.05是所有样品的默认值.通过设置CT = 0,您将获得与标准Stauffer&Grimson算法非常相似的算法.
有人在OpenCV网站上问过几乎同样的问题,但没有答案.
我有一个角度列表,想摆脱异常值。我的第一个想法是计算中位数。不幸的是存在“环绕”问题。我不知道定义一组角度(或时钟位置)的中值的“正确”方法。
我的想法是先计算平均值,然后用它打破另一侧的圆。
Example:
{6, 50, 52, 54, 60, 250} (in degree, 0-360)
average ~ 39
new range [-219, 219) -> new order 250, 6, 50, 52, 54, 60, 250
52 or 54 as median
Run Code Online (Sandbox Code Playgroud)
这是一个好方法,还是我不知道有更好的方法?
有点相关:这个问题展示了计算角度均值的方法。
Applies only to Matplotlib <1.4.0!
I have the strange effect, that the color of the outlier changes, if i change the symbol used to draw them. (Documentation for Boxplot) Seems to me like a bug.
How can i 'reset' the colour to blue for all outlier even if i want to use another symbol than "+"?
Minimal Working Example modeled after official Example:
#!/usr/bin/python
from pylab import *
# fake up some data
spread = rand(50) * …Run Code Online (Sandbox Code Playgroud) 在"Accelerated C++:Example Programming by Example"中,第6.1.3章是find()来自"algorithm"库的示例:
我们想检查a char是否在字符串中:
bool find_char(char c){
string str = "asdf";
return find(str.begin(), str.end(), c) != str.end();
}
Run Code Online (Sandbox Code Playgroud)
然后,有一个解释find():
它与find_if类似,不同之处在于它不是调用谓词,而是查找作为第三个参数给出的特定值.与find_if一样,如果存在我们想要的值,则该函数返回一个迭代器,表示给定序列中第一次出现的值.如果找不到该值,则find返回其第二个参数.
这让我想知道为什么我们不使用更短更清洁的版本:
bool find_char(char c){
string str = "asdf";
return find(str.begin(), false, c); //does not compile, see Top Answer
}
Run Code Online (Sandbox Code Playgroud)
这被认为是不好的风格?这段代码有问题吗?
我想在结构中使用struct作为值.为什么我必须使用value_type在地图中插入一些东西?
#include <map>
struct myStruct {};
int main()
{
std::map<int,myStruct> myStructMap;
myStruct t;
myStructMap.insert(std::map<int,myStruct>::value_type(1, t)); // OK
myStructMap.insert(1,t);
// Error:
// "no instance of overloaded function 'std::map [...]' matches
// the argument list"
}
Run Code Online (Sandbox Code Playgroud)