- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试实现概述的密码本前景检测算法 here在学习 OpenCV 一书中。
该算法仅针对图片的每个像素描述了一种基于码本的方法。所以我采用了想到的最简单的方法 - 拥有一组代码簿,每个像素一个,很像 IplImage 的矩阵结构。数组的长度等于图像中的像素数。
我写了以下两个循环来学习背景和分割前景。它利用我对src图像内部矩阵结构的有限理解,使用指针算法遍历像素。
void foreground(IplImage* src, IplImage* dst, codeBook* c, int* minMod, int* maxMod){
int height = src->height;
int width = src->width;
uchar* srcCurrent = (uchar*) src->imageData;
uchar* srcRowHead = srcCurrent;
int srcChannels = src->nChannels;
int srcRowWidth = src->widthStep;
uchar* dstCurrent = (uchar*) dst->imageData;
uchar* dstRowHead = dstCurrent;
// dst has 1 channel
int dstRowWidth = dst->widthStep;
for(int row = 0; row < height; row++){
for(int column = 0; column < width; column++){
(*dstCurrent) = find_foreground(srcCurrent, (*c), srcChannels, minMod, maxMod);
dstCurrent++;
c++;
srcCurrent += srcChannels;
}
srcCurrent = srcRowHead + srcRowWidth;
srcRowHead = srcCurrent;
dstCurrent = dstRowHead + dstRowWidth;
dstRowHead = dstCurrent;
}
}
void background(IplImage* src, codeBook* c, unsigned* learnBounds){
int height = src->height;
int width = src->width;
uchar* srcCurrent = (uchar*) src->imageData;
uchar* srcRowHead = srcCurrent;
int srcChannels = src->nChannels;
int srcRowWidth = src->widthStep;
for(int row = 0; row < height; row++){
for(int column = 0; column < width; column++){
update_codebook(srcCurrent, c[row*column], learnBounds, srcChannels);
srcCurrent += srcChannels;
}
srcCurrent = srcRowHead + srcRowWidth;
srcRowHead = srcCurrent;
}
}
该程序可以运行,但非常缓慢。有什么明显的东西在减慢它的速度吗?或者它是简单实现中的固有问题?我可以做些什么来加快速度吗?每个码本都没有按特定顺序排序,因此处理每个像素确实需要线性时间。因此,将背景样本加倍,对于每个像素,程序运行速度减慢 2,然后按像素数放大。但就实现而言,我没有看到任何清晰、合乎逻辑的方法来对代码元素条目进行排序。
我知道在 opencv 样本中有一个相同算法的示例实现。但是,该结构似乎要复杂得多。我希望更多地了解这种方法背后的原因,我知道我可以为现实生活中的应用程序修改示例。
谢谢
最佳答案
无论您如何实现,对图像中的每个像素进行操作都会很慢。
关于c++ - OpenCV 前景检测速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3654865/
我的应用程序可以正确接收通知,但无法显示包含收到的信息的弹出通知(如果应用程序已打开)。 注意:如果应用程序在后台,通知会毫无问题地显示。 我的代码: 我以这种方式收到通知: @Override pu
我需要根据收到远程推送通知的时间来处理它们。当应用程序在后台或终止时,如果我收到推送通知,当我点击推送通知时,我会在 ` 中处理它 - (void)application:(UIApplication
我想根据控件的状态更改/动画自定义按钮控件模板的 Foreground 属性。 在 RC0 之前,我设置了 ContentPresenter 的前景,给它一个 x:Name,并在 VisualStat
我正在尝试设置 block ,以便其前景色每次都会改变鼠标光标移到它上面,这是我的代码: Remove Message
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post一个问题。 6
有时,当我执行“docker-compose up -d”时,我忘记了“-d”部分。因此它开始向我显示启动日志,如果我按Ctrl + C,它将终止所有过程并向我显示关闭日志。 我对此有几个问题: 如果
我有一个启动器风格的应用程序。用户启动应用程序后,时钟开始滴答作响,经过一定时间后,用户将返回到我的应用程序的主要 Activity,并被告知时间到了。 为了实现这一点,我有一个 AsyncTask,
我有一个 FrameLayout,我想通过选择器为它应用前景可绘制对象,我正在尝试实现“drawSelectorOnTop”但是为了简单的布局 现在当用户按下“state_pressed”时选择器不适
我很难改变 Angular 2 Material 的前景颜色。例如在工具栏中,文本是黑色的。我尝试用以下样式更改它 @import '~@angular/material/theming'; $pri
我有一个奇怪的案例。我的 swift ios 应用程序已连接到 Cloudkit。如果应用程序未运行(后台状态),我每次都会收到我的通知徽章和警报!如果应用程序正在运行,则不会收到任何通知!我知道它没
这个问题在这里已经有了答案: How to change Status Bar text color in iOS (59 个答案) How to change the status bar bac
我想知道是否可以更改共享元素过渡的 z 顺序?看: 我有一个带有图像的布局,它填满了整个屏幕。图片前面是一个显示图片标题的文本框。如果我点击文本框,将开始过渡到详细信息 Activity 。因此,我实
每当文本框获得焦点时,文本的边框和前景都会根据当前主题更改: 主题灯->边框:黑色,文字:白色,背景:透明 theme dark ->border:white, text:white, backgro
我最近开始熟悉 Web 应用程序开发并努力解决一个基本的 css 布局问题。 所需的布局是一个中心区域重叠几个背景元素。看这里: 此图像显示了所需的布局: 我也在 codepen 上破解过它: Cod
这是交易。我可以创建一个 ListBox 并为其设置样式。我可以编辑模板的副本,以便状态在 Expression Blend 3 中可用。我可以更改状态,以便在选择时修改行项目的背景颜色。但是由于 C
我可以通过这样做来改变 QImage 的背景: QPainter painter(&image); painter.setCompositionMode(QPainter::CompositionMo
我有一个为 iOS8 实现的共享扩展。该服务使用 OAuth 进行身份验证。我用于扩展的登录信息与容器应用共享。 问题是: 当我在扩展中时,然后应用程序切换到容器应用程序并注销,然后应用程序切换回包含
我有一个 WPF Canvas 项目,我从工具箱中将对象拖放到 Canvas 上。根据某些数据,其中一些对象应该闪烁或闪烁。我得到一个未处理的异常:无法在不可变对象(immutable对象)实例上设置
我是一名优秀的程序员,十分优秀!