小编Chr*_*ris的帖子

如何开始使用GTest和CMake

我最近因使用CMake编译我的C++项目而被出售,现在我想开始为我的代码编写一些单元测试.我决定使用Google Test实用程序来帮助解决这个问题,但在入门时需要一些帮助.

我一整天都在阅读各种指南和示例,包括Primer,IBM介绍以及有关SO(此处此处)的一些问题以及我已经忘记的其他来源.我意识到那里有很多,但不知怎的,我仍然遇到困难.

我目前正在尝试实施最基本的测试,以确认我已经编译/安装了gtest,并且它无法正常工作.唯一的源文件(testgtest.cpp)被认为几乎完全由前面的回答:

#include <iostream>

#include "gtest/gtest.h"

TEST(sample_test_case, sample_test)
{
    EXPECT_EQ(1, 1);
}
Run Code Online (Sandbox Code Playgroud)

和我关联的CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.6)
project(basic_test)

# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})

# Add test cpp file
add_executable(runUnitTests
    testgtest.cpp
)

# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})

add_test(
    NAME runUnitTests
    COMMAND runUnitTests
)
Run Code Online (Sandbox Code Playgroud)

请注意,我选择链接gtest_main而不是在cpp文件的末尾提供main,因为我相信这将允许我更容易地将测试扩展到多个文件.

构建生成的.sln文件(在Visual C++ 2010 Express中)时,我很遗憾地得到了一个很长的表单错误列表

2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) …
Run Code Online (Sandbox Code Playgroud)

unit-testing cmake googletest

113
推荐指数
4
解决办法
10万
查看次数

应该避免直接描述附加风格的css类名称如'floatleft'吗?

许多网站使用类的名称,如floatleft,clearfloat,alignright,small,center等描述附加到的类风格.这似乎是有道理的所以写新的内容,你可以很容易地包装(例如)当<div class="clearfloat">...</div>你的元素周围使其行为您想要的方式.

我的问题是,这种命名类的风格是否违背了将内容与表示分离的想法?放置class="floatleft"元素显然是将表示信息放入HTML文档中.

应该避免像这样直接描述附加风格的类名,如果有的话,还有什么替代方案?


为了澄清,这不仅仅是一个如何命名类的问题.例如,语义准确的文档可能类似于:

<div class="foo">Some info about foo</div>
...
<div class="bar">Info about unrelated topic bar</div>
...
<div class="foobar">Another unrelated topic</div>
Run Code Online (Sandbox Code Playgroud)

假设所有这些div需要清除浮点数,css看起来像:

div.foo, div.bar, div.foobar {
    clear:both;
}
Run Code Online (Sandbox Code Playgroud)

随着这些清算元素数量的增加,这开始变得丑陋 - 而单一的清算元素class="clearfloat"将起到同样的作用.是否建议根据附加的样式对元素进行分组以避免在CSS中重复,即使这意味着表示信息会蔓延到HTML中?


更新:感谢您的所有答案.普遍的共识似乎是避免这些类名称支持语义名称,或者至少在不妨碍维护的情况下谨慎使用它们.我认为重要的是布局的变化不应该要求对标记进行过多的更改(尽管有些人说如果使整体维护更容易,那么微小的改变是可以的).感谢那些建议其他方法来保持CSS代码更小的人.

html css presentation

51
推荐指数
7
解决办法
5794
查看次数

OpenCV中的矩阵乘法

我在OpenCV中有两个Mat图像:

Mat ft = Mat::zeros(src.rows,src.cols,CV_32FC1);
Mat h = Mat::zeros(src.rows,src.cols,CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

两个图像都是相同的尺寸,并且是从单个源图像计算出来的.

我想将这两个图像相乘但尝试使用这两个图像

Mat multiply1 = h*ft;

Mat multiply2;
gemm(h,ft,1,NULL,0,multiply2);
Run Code Online (Sandbox Code Playgroud)

但两者都会导致以下断言失败:

OpenCV错误:断言失败(a_size.width == len)在未知函数中,文件... matmul.cpp抛出'cv :: exception'后调用终止

我究竟做错了什么?

opencv

37
推荐指数
1
解决办法
9万
查看次数

OpenCV检测数字

我在iPhone上使用OpenCV,需要检测图像中的数字.我将图像分割成较小的图像,因此每个图像只有一个数字(1-9).所有数字都是打印的,不是手写的.

用OpenCV算出数字的最佳方法是什么?

更新:

我已成功找到数字并将其提取出来.它们看起来像这样:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

提取它们时,它们的大小相同,依此类推.我已经保存了一堆图像并将它们放在OCR目录中,在那里它们被分类为数字.喜欢:ocr/1/100.jpg 101.jpg ....和ocr/2/200.jpg 201.jpg ....

然后我将使用与Basic OCR教程相同的方法:http://blog.damiles.com/?p = 93

但是,我正在为iPhone编程,不能使用C++代码(编译时出错等),我无法访问highgui.

我尝试使用cvMatchTemplate()并匹配一堆图像,但它看起来很糟糕......

我可以尝试其他任何想法吗?

ocr opencv image-processing

20
推荐指数
3
解决办法
5万
查看次数

在发布/调试模式下,Haar级联的结果不同

我正在使用从MIT汽车数据集训练的Haar级联分类器来检测OpenCV中的车辆(使用随OpenCV提供的实用程序进行训练).在调试模式下编译时,这种方法工作得相当好,但是在发布模式下编译时,级联根本不会进行任何检测.在下面的测试图像上运行以下代码可以在调试模式下进行检测,但在发布模式下无任何检测(此行为将继续通过我的数据序列中的所有图像).

你能说出为什么会出现这种情况,更重要的是,在发布模式下运行时我能做些什么才能获得检测?

级联文件

cv::Mat testImage = cv::imread("testImage.png",0);
cv::equalizeHist(testImage, testImage);

cv::CascadeClassifier vehicleCascade;
vehicleCascade.load("cars3.xml");

// Detect vehicles
std::vector<cv::Rect> cars;
vehicleCascade.detectMultiScale(
    testImage,                  // Input image
    cars,                   // Output bounding boxes
    1.1,                    // scale factor - how much image size is reduced at each scale
    5,                      // min neighbours - how many neighbours required to maintain rect
    0|CV_HAAR_SCALE_IMAGE,  // Not used
    cv::Size(30,30),        // Min poss object size
    cv::Size()              // Max poss object size
    );

std::cout << "Found " << cars.size() << …
Run Code Online (Sandbox Code Playgroud)

c++ opencv release-mode debug-mode

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

OpenCV DescriptorMatcher radiusMatch和knnMatch结果格式

有谁碰巧知道为什么OpenCV 2 DescriptorMatcher::radiusMatch()knnMatch()采取vector<vector<DMatch>>& matches?我有点困惑为什么它不仅仅是一个矢量,因为它只是场景中与训练图像相对应的单个点阵,对吧?

我有这样的事情:

void getMatchingPoints(
    const vector<vector<cv::DMatch> >& matches,
    const vector<cv::KeyPoint>& keyPtsTemplates,
    const vector<cv::KeyPoint>& keyPtsScene,
    vector<Vec2f>& ptsTemplate,
    vector<Vec2f>& ptsScene
    )
{
    ptsTemplate.clear();
    ptsScene.clear();

    for (size_t k = 0; k < matches.size(); k++)
    {
        for (size_t i = 0; i < matches[k].size(); i++)
        {
            const cv::DMatch& match = matches[k][i];
            ptsScene.push_back(fromOcv(keyPtsScene[match.queryIdx].pt));
            ptsTemplate.push_back(fromOcv(keyPtsTemplates[match.trainIdx].pt));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我对如何实际映射大约有点困惑.一旦我将它们全部放入,对象的位置ptsScene.当我绘制它们时,这些点似乎散落在我身上,所以我想我错过了嵌套向量所代表的含义.

c++ opencv computer-vision

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

计算机视觉的地面实况数据收集和评估

目前,我开始开发涉及人类追踪的计算机视觉应用.我想为将在此项目中记录的视频构建地面实况元数据.元数据可能需要手工标记,并且主要包括图像中人类的位置.我想使用元数据来评估我的算法的性能.

我当然可以使用例如qt和/或opencv构建标签工具,但我想知道是否有某种事实上的标准.我遇到了毒蛇,但它看起来已经死了,并不像我希望的那样容易.除此之外,我没有找到太多.

这里是否有人建议使用哪种软件/标准/方法进行标记和评估?我的主要偏好是去面向c ++,但这不是一个严格的约束.

亲切的问候和提前谢谢!汤姆

evaluation tracking metadata image-processing computer-vision

9
推荐指数
2
解决办法
4459
查看次数

C++ OpenCV 2.3中缺少MoveWindow()

我正在使用OpenCV 2.3的C++版本,我正在努力完成一项基本任务.我想要做的是创建一个窗口并将其移动到屏幕上的特定位置,例如:

cv::namedWindow("My Window", 1);
cv::MoveWindow("My Window", 10, 10);
Run Code Online (Sandbox Code Playgroud)

但是,似乎MoveWindow()函数不可用.从OpenCV 2.3文档(链接)看来,似乎有C和Python实现,但没有C++.这是否意味着有更好的方法来做到这一点?

从文档的相关部分:

MoveWindow
==========
Moves window to the specified position
--------------------------------------
C: void cvMoveWindow(const char* name, int x, int y)

Python: cv.MoveWindow(name, x, y) ? None

Parameters:

- name – Window name
- x – The new x-coordinate of the window
- y – The new y-coordinate of the window
Run Code Online (Sandbox Code Playgroud)

解决:从最新版本的OpenCV开始,现在有一个cv::MoveWindow("const string& winname, int x, int y)功能.参考这里.

c c++ python opencv

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

OpenCV和OpenCL之间的区别

任何人都可以解释一下OpenCV和OpenCL之间有什么区别?什么适合Java中的Android图像处理?

java android opencv opencl

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

OpenCV或Boost智能指针

我有一个扩展的图像处理项目,它在很大程度上依赖于OpenCV库,尽管我也使用了一些boost函数.

我想开始使用智能指针来替换一些开始引起问题的原始指针.我的问题是要使用哪种类型的智能指针,我的主要选择(我认为)是OpenCV cv::Ptr或其中一种增强型.

我知道有一个数量问题,解释每个升压指针之间的不同,但我希望有人能提供怎样的解释cv::Ptr与他们比较,使一方或另一方的任何建议?

编辑 - 我从OpenCV文档中注意到Ptr类似于boost shared_ptr,是否需要哪些库/包含文件的本质区别?

c++ boost opencv smart-pointers image-processing

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