我是C++的新手,并且一直在努力编译/制作/链接/构建/无论如何,让我们看看有人可以帮助我.我做了一些搜索,发现其他人有类似的问题,但我尝试了他们的解决方案没有运气,所以这里是:
一个使用C++ 11功能的简单c ++程序,如统一初始化,线程to_string等......会产生错误,"xxx"未在范围内声明.特别是现在我想使用to_string,并在std命名空间中使用它或专门std::to_string创建错误"to_string"不是STD的成员.很明显它不是用C++ 11编译的.
所以这是我的make文件:
#####################################
cmake_minimum_required (VERSION 2.8)
project (raspicam_test)
find_package(raspicam REQUIRED)
find_package(OpenCV)
IF ( OpenCV_FOUND AND raspicam_CV_FOUND)
MESSAGE(STATUS "COMPILING OPENCV TESTS")
add_executable (main main.cpp)
#target_compile_features(main PRIVATE cxx_range_for)
set_property(TARGET main PROPERTY CXX_STANDARD 11)
target_link_libraries (main ${raspicam_CV_LIBS})
ELSE()
MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
ENDIF()
#####################################
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我正在使用覆盆子pi玩OpenCV.但是,如果没有C++ 11函数,程序将编译并运行没有问题.但我想从C++ 11中添加线程和其他好东西.我set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED 11)根据CMAKE文档添加了该行:
https://cmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html
并且它产生的错误没有区别.我先做了它没有_REQUIRED,然后用它.我也尝试了,target_compile_features()但CMAKE返回了"未知的CMAKE命令".
其他细节: - 在Rasberry上编译pi 3运行debian jessie …
我知道有很多陷阱与使用等比较具有double的,所以我对如何实现某个值的检查谨慎等于准确 0.0。基本上,我想知道是否从未分配过值,或者是否有意为该值分配0.0了文字。我不想知道它是否接近零(例如 - 0.0000000001)。
所以我在使用val == 0.0或类似的东西之间进行辩论:
bool isZero(double val)
{
if (val > std::numeric_limits<double>::min()) {
return false;
} else if (val < -std::numeric_limits<double>::min()) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这两种说法会有区别吗?我应该偏爱一个吗?我特别关注下溢场景,其中val == -0.0.
谢谢
我应该将“从未分配”声明澄清为“默认初始化后从未分配”。
我有一个在 Windows 中编写和测试的应用程序,它使用 OpenCV 进行图像评估。它使用OpenCV 3.1.0并使用MinGW-W64 5.3.0编译。
现在,我已经克隆了这个应用程序,并在 Linux 环境中构建并测试了它。我首先在 Raspberry Pi (Raspian Jessie) 上完成,然后在笔记本电脑上完成 (Ubuntu 16.04,g++ 5.4.0)。我评估了相同的图像并得到了不同的结果。
我的代码太多了,无法发布并期望每个人都能整理出来,所以我的基本问题是,有什么我应该特别寻找的吗?现在我正在我的 Ubuntu 笔记本电脑上调试它,但是如果有人过去有类似的经历并且知道要立即查找什么,那么它可以节省我一些时间。
我应该提到我正在使用哪些功能:
cv::cvtColor
cv::Blur
cv::Canny
cv::FindContours
cv::fitLine
cv::fitEllipse
Run Code Online (Sandbox Code Playgroud) 我通过指针(cv::Mat 和 bool 的)将几个变量传递给几个线程,并试图了解何时需要使用互斥锁。我发现如果不在 cv::Mat 上使用它,我的程序就会崩溃(可能是因为一个线程正在写入另一个正在读取的内存区域),所以我已经为这些变量实现了互斥锁,它有解决了这个问题。
但是现在互斥体是我通过指向每个线程的指针传递的另一个变量。所以在这种情况下,对 mutex 变量的处理的使用与我需要互斥的其他变量相同,所以 mutex 有什么特别之处以至于我不需要互斥(当然还有永远和概念不起作用)。
需要明确的是,我的代码运行良好,这更多是出于教育目的。
例子:
//Common frames
cv::Mat captureimage, displayimage;
std::mutex capturemutex, displaymutex;
//Start image capture thread
std::thread t_imagecapture( CaptureImageThread, &captureimage, &capturemutex, &exitsignal );
//Start image processor thread
std::thread t_imageprocessor( ProcessImageThread, &captureimage, &capturemutex, &exitsignal );
//Start display thread
std::thread t_displayupdate( DisplayUpdateThread, &displayimage, &displaymutex, &exitsignal );
Run Code Online (Sandbox Code Playgroud) 我想在我的第一个 Keras 层中调整我的输入图像的大小,所以我遵循了这个SO 问题。解决方案效果很好,直到我保存了我的模型,然后尝试在另一个文件中使用它并抛出
NameError: name 'ktf' is not defined
Run Code Online (Sandbox Code Playgroud)
我尝试添加:
from keras.backend import tf as ktf
Run Code Online (Sandbox Code Playgroud)
到打开模型的文件,但它仍然无法在模型中识别它。我需要做什么才能让打开保存模型的程序识别 tensorflow 后端使用的函数?
还有一些细节...
火车.py:
from keras.backend import tf as ktf
#Other stuff...
model = Sequential()
model.add(Lambda(lambda x: ktf.image.resize_images(x, (80, 160)), input_shape=(160, 320, 3))) #This line referenced in error
#Rest of model and training...
model.save('model.h5')
Run Code Online (Sandbox Code Playgroud)
评估.py:
from keras.backend import tf as ktf
#Other stuff...
model = load_model('model.h5') #Error is here
Run Code Online (Sandbox Code Playgroud)
错误信息:
Using TensorFlow backend.
Traceback (most recent call last):
File "C:\program\eval.py", …Run Code Online (Sandbox Code Playgroud)