小编flo*_*hge的帖子

检测图像上的硬币(和拟合椭圆)

我目前正在开展一个项目,我正试图检测一些平躺在平面上的硬币(即桌子).硬币不重叠,不会被其他物体隐藏.但可能有其他物体可见,照明条件可能不完美...基本上考虑自己拍摄你的桌子上有一些硬币.

所以每个点都应该是椭圆形.由于我不知道相机的位置,椭圆的形状可能会有所不同,从圆圈(从顶部看)到扁平椭圆,取决于硬币拍摄的角度.

我的问题是,我不知道如何提取硬币,最后在它们上面放置椭圆(我正在寻找进一步的计算).

现在,我刚刚通过在OpenCV中设置阈值进行了第一次尝试,使用findContours()获取轮廓线并拟合椭圆.不幸的是,轮廓线很少给我硬币的形状(反射,光线不好......),这种方式也不是首选,因为我不希望用户设置任何阈值.

另一个想法是在该图像上使用椭圆的模板匹配方法,但由于我不知道相机的角度和椭圆的大小,我认为这不会很好...

所以我想问一下是否有人能告诉我一种方法可以解决我的问题......

有没有快速的方法从图像中提取三个硬币?计算应该在移动设备上实时进行,并且该方法对于不同或变化的灯光或背景的颜色不应过于敏感.

如果有人能给我任何关于哪种方法对我有用的提示,那会很棒...

opencv image image-processing image-recognition

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

图像减法分割的优化算法

对于OpenCV中的项目,我想尽可能好地分割移动物体,当然噪音最小.

为此,我想使用图像减法算法.我已经有一个正在运行的程序但是今天找不到方法来获得足够公平的结果.

我已经给出了以下(灰度)图像:

IplImage* grayScale;
IplImage* lastFrame;
IplImage* secondLastFrame;
IplImage* thirdLastFrame;
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经试过电流.减去帧图像和最后一帧与cvSub();cvAbsDiff();获得移动部件.

但不幸的是,我仍然在那里得到很多噪音(即由于在刮风的时候稍微移动树木)并且如果移动的物体相当大并且具有同色(假设一个穿着白色或黑色衬衫的人),减法只检测人物左侧和右侧图像的变化,而不是身体本身的变化,因此有时会将一个物体检测为两个物体......

cvAbsDiff(this->lastFrame,grayScale,output);
cvThreshold(output,output,10,250, CV_THRESH_BINARY);
cvErode(output,output, NULL, 2);
cvDilate(output,output, NULL, 2);
Run Code Online (Sandbox Code Playgroud)

为了消除这种噪音,我试图用cvErode()和蚀刻和扩张图像,cvDilate()但是这很慢,如果屏幕上移动的物体很小,侵蚀会对物体的大部分消失很多,因此在放气后我并不总是得到一个好的结果或分裂的对象.

在此之后我做了一个cvFindContours()获取轮廓,检查尺寸以及是否适合在移动物体周围画一个矩形.但结果很差,因为由于坏的分割,对象通常被分成几个矩形.

一位朋友现在告诉我,我可能会尝试使用两个以上的帧进行减法,因为这可能已经减少了噪音......但我真的不知道他的意思是什么以及我应该如何添加/减去帧以获得一个几乎没有噪音的图像,显​​示足够大的物体斑点.

任何人都可以帮助我吗?如何使用多个帧来获得尽可能具有最小噪声但具有足够大的移动物体斑点的图像?我会感谢任何琐事......

新增内容:

我在这里上传了一个当前的视频:http://temp.tinytall.de/也许有人想在那里试一试......

这是一个框架:左边的图像显示了我从cvFindContours()的结果,右边的是分割的图像,然后我尝试找到轮廓...

分割结果

所以一个大型物体如果它们移动速度足够快就可以正常工作......即自行车......但是对于走路的人来说它并不总能得到一个好的结果......任何想法?

opencv image image-processing computer-vision image-segmentation

8
推荐指数
1
解决办法
1347
查看次数

Kotlin 求和换行 — 结果取决于运算符的放置

今天我在 Kotlin 中遇到了一个我无法解释的奇怪行为。给出以下代码:

data class Data(
    val v1: Int,
    val v2: Int,
    val v3: Int)

fun main() {

    val d = Data(1,1,1)

    val sum1 = d.v1 + d.v2 + d.v3
    println("Oneliner: $sum1") // prints: Oneliner: 3

    val sum2 = d.v1 
        + d.v2 
        + d.v3
    println("OperatorFirst: $sum2") // prints: OperatorFirst: 1

    val sum3 = d.v1 + 
        d.v2 + 
        d.v3
    println("OperatorLast: $sum3") // prints: OperatorLast: 3

}
Run Code Online (Sandbox Code Playgroud)

(可测试: https: //pl.kotl.in/gMjif_6FO

现在似乎取决于您将+运算符放置在哪里才能获得 3 的正确结果。但是,IDE 没有显示第二个版本可能有任何问题,而且我找不到任何关于为什么这种情况会出现这种情况的信息不同。

关于软件工程空间的一个问题还说,一些编码指南建议将运算符放在行的开头:https://softwareengineering.stackexchange.com/questions/93670/line-break-before-after-operator

另外,我能找到的对此行为的唯一解释是+行开头的 …

syntax operators kotlin

7
推荐指数
1
解决办法
776
查看次数

由Z-Value着色的3D散点图

我一直在谷歌搜索一段时间,但找不到我的问题的解决方案.我是业余matlab用户,我想创建一个3D散点图,为此我有一个矩阵包含3D空间中的几个点:

>> size(A)

  ans =

        2511           3
Run Code Online (Sandbox Code Playgroud)

我能够使用"scatter3"功能创建一个3D散点图,但现在我对3D点进行了颜色编码.

scatter3(A(:,1),A(:,2),A(:,3));

这将绘制数据,但现在我想添加一个基于z值的颜色编码......颜色本身并不重要.它可以是彩虹光谱或温度光谱等等.我只是想对它们进行颜色编码以区分点的z值.

任何人都可以帮我吗?谢谢!

matlab color-coding scatter-plot matlab-figure

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

纹理仅在某些设备上显示

我目前正在编写一个适用于OpenGL ES 1.1的Android应用程序.它在我开发的HTC Desire(Android 2.3.7)上运行良好.现在我想在Nexus 7上测试它,但它只显示黑屏.我发现所有纹理都只是呈现黑色.在没有对象和没有纹理的部分上,我得到(几乎)黑色背景颜色.

所以我的问题是为什么纹理在某些设备上呈现得很好而在其他设备上却没有?

纹理都是二次的,大小功率为2(即512x512,1024x1024).这些是创建纹理时使用的设置:

gl.glBindTexture(GL10.GL_TEXTURE_2D, getTextureId());   

// Create Nearest Filtered Texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
        GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
        GL10.GL_LINEAR);

// Different possible texture parameters, e.g. GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
        GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
        GL10.GL_REPEAT);

gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, /*GL10.GL_REPLACE*/ GL10.GL_MODULATE);

// Use the Android GLUtils to specify a two-dimensional texture image
// from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
Run Code Online (Sandbox Code Playgroud)

我可以尝试在两个设备上渲染纹理吗?

android textures opengl-es

5
推荐指数
1
解决办法
910
查看次数

计算非凸多边形上的地理坐标区域

我想计算从GPS轨迹得到的多边形面积.所以基本上我会在一段时间后存储设备/用户的位置,比方说5秒.

在这个轨道多边形之外,我想计算轨道所在的区域.对于凸多边形,这应该不是问题,因为我想我只需要计算三角形的面积(当每个三角形有一个起点时第一点).基本上如左图所示.(黄色多边形是由GPS位置组成的多边形,暗线显示用于区域计算的三角形,浅黄色是所需区域)

但昨晚我发现了这个想法的背面,这是多边形不凸出的时候.不仅将在该区域中计算多边形外部(左上侧)的部分,还将多次测量多边形的某些区域(查看左下方的重叠三角形).

样本多边形

有没有人知道如何实现这一目标?我的意思是,如果我的多边形像S形一样,我甚至很难知道应该计算哪个区域...(但我可以忍受...只要它在多边形上获得足够公平的结果(几乎)关闭.

如果多边形是非凸的,那么我计算多边形的凸包然后对其进行面积计算的另一个想法将无法正常工作.然后,我不会多次计算某些区域,但在正确的图像中,我会计算出比它更大的区域.

如果有人能帮助我,那会很棒!谢谢!

algorithm geometry polygon geolocation

4
推荐指数
1
解决办法
5118
查看次数

在QtCreator中使用OpenCV 2.3和Qt

随着OpenCV 2.3的发布终于出来,我想在我的系统上编译和安装这个最新版本.由于我经常使用Qt和QtCreator,我当然希望能够在我的Qt项目中使用它.我已经尝试了几种方法几个小时但总是会出错:

首先尝试:使用WITH_QT编译OpenCV 2.3

首先,我想这样做,就像我对2.2发布一样,对我来说很好.为此我遵循了本指南:http://knowtheabc.wordpress.com/2011/02/25/windows-opencv-and-qt-creator/

  • 下载源代码
  • 设置CMake并告诉它创建MInGW Makefile并指定路径g++.exe,gcc.exeqmake.exe在我的C:\ Qt ...路径中,检查WITH_QT并生成Makefiles以进行发布.
  • 使用mingw32-make和构建并安装在shell中mingw32-make install

在成功完成此操作后,我只需要将路径添加到我的".pro"文件中,并且能够构建一些使用OpenCV的好软件(在我使用2.2版本时).基本上最后一部分在这里描述:http://knowtheabc.wordpress.com/2011/02/25/opencv-in-qt/

所以我尝试使用与旧版本一样成功编译的2.3版本.它甚至构建了我的示例程序,但是只要我执行它,它就会再次关闭并返回:-1073741515

第二次尝试:使用MinGW预先构建的OpenCV superpack

由于第一种方法不起作用,我尝试使用预构建版本.虽然这些没有启用WITH_QT,但我还是想尝试一下.

所以我下载了superpack,将其解压缩并放在某个地方.然后我想像以前一样做,并将include文件夹和dll的路径添加到我的".pro"文件中:

INCLUDEPATH+= C:/workspace/opencv/OpenCV2.3/build/include
LIBS+= C:/workspace/opencv/OpenCV2.3/build/x64/mingw/bin/*.dll
Run Code Online (Sandbox Code Playgroud)

作为编译器,我使用了当前Qt SDK附带的MinGW编译器.但这会在建造时崩溃:

C:/workspace/opencv/OpenCV2.3/build/x64/mingw/bin/libopencv_calib3d230.dll: file not recognized: File format not recognized
collect2: ld returned 1 exit status
mingw32-make[1]: *** [release\CoinDetector.exe] Error 1
mingw32-make: *** [release] Error 2
Run Code Online (Sandbox Code Playgroud)

第三次尝试:就像第二次尝试一样,但是使用VC2008编译器

我也尝试使用Qt SDK附带的vc2008编译器.所以我选择了编译器并调整了".pro"文件中的路径来使用:

LIBS+= C:/workspace/opencv/OpenCV2.3/build/x64/vc9/bin/*.dll
Run Code Online (Sandbox Code Playgroud)

但是这也会因为无法读取dll的错误而崩溃:

C:/workspace/opencv/OpenCV2.3/build/x64/vc9/bin/opencv_calib3d230.dll : fatal error LNK1107: Ungültige oder beschädigte Datei: Lesen …
Run Code Online (Sandbox Code Playgroud)

qt opencv mingw qt-creator visual-studio-2008

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

在 QtXML (QDomElement) 中编写 XML 节点

我想写像这样的节点

<name>Peter</name> 
Run Code Online (Sandbox Code Playgroud)

(带有开始和结束标记)到 QDomDocument 中。

当我创建 QDomElements 并将它们作为子元素附加到父元素时:

QDomElement node = doc.createElement("node");
parent.appendChild(node);
Run Code Online (Sandbox Code Playgroud)

它们被添加为

<node/>
Run Code Online (Sandbox Code Playgroud)

到父元素。父级会自动获取开始和结束标记,因此文件将如下所示:

<parent>
    <node/>
</parent>
Run Code Online (Sandbox Code Playgroud)

但是我如何向我的节点添加一个值,使它看起来像我想要的(在开始和结束标记之间有值)。将一个新的 QDomElement 作为子节点添加到节点,它看起来就像 . 添加属性会显示为 ?

如果有人可以帮助我,那就太好了!谢谢!

c++ xml qt4 qtxml

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