在CLion中,默认的CMakeLists.txt仅设置C++ 11编译器标志.我希望在我的所有项目中默认都有警告和迂腐旗帜.
这是默认情况
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
我希望默认情况下这样,所以每次创建新项目时都不需要更改它
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -W -Wall -Wextra -pedantic")
在"设置" - "文件和代码模板"中,我可以更改C++标头/源模板,但不能更改CMakeLists.txt模板.有什么办法可以在CLion中更改默认的CMakeLists.txt模板吗?
在表格上我有一些个人信息(姓名,地址等)和一个changeListener,它根据性别和姓氏更新称呼和致敬.如果底层实体已经存储在数据库中,它可以正常工作.如果我输入新(未保存)条目的数据,则在调用侦听器后重置表单.输入的所有数据都丢失了,只保留了我在听众和性别中修改的称呼,字母变换,我使用的姓名和附加ajax呼叫.
这是表单的一部分:
<h:form id="person">
  <p:panel header="#{msg['prs']}">
    <h:panelGrid columns="6" cellpadding="4">
      <h:outputText value="#{msg['prs.salutation']}"/>
      <p:inputText value="#{personBean.selectedPerson.salutation}"/>
      <h:outputText value="#{msg['prs.lettersalutation']}"/>
      <p:inputText value="#{personBean.selectedPerson.letterSalutation}"/>
      <p:spacer/><p:spacer/>
      <h:outputText value="#{msg['prs.name']}: "/>
      <p:inputText value="#{personBean.selectedPerson.name}">
        <p:ajax event="change" update="person"
          listener="#{personBean.selectedPerson.updateSalutation}" />
      </p:inputText>
      <h:outputText value="#{msg['prs.surname']}: "/>
      <p:inputText value="#{personBean.selectedPerson.surname}"/>
      <h:outputText value="#{msg['prs.gender']}: "/>
      <p:selectOneMenu value="#{personBean.selectedPerson.gender}">
        <f:selectItems value="#{enumHelper.getEnum('Gender')}"/>
         <p:ajax event="change" update="person" 
           listener="#{personBean.selectedPerson.updateSalutation}" />
      </p:selectOneMenu>
  </p:panel>
</h:form>
在代码中我做了更新.
public void updateSalutation() {
    // simplified
    letterSalutation = "...";
    salutation = "...";
    // outputs for debug
    System.out.println(this.getName()); // --> not null
    System.out.println(this.getSurname()); // --> null
}
已经在这个调用中的姓氏,即使在那里输入了数据,它也没有附加到ajax调用.所有其他领域也是如此.在我的应用程序中,我使用的是Primefaces,JavaEE 1.6和Wildfly.
这种行为的原因是什么?有什么我可以改变我的电话来防止这种情况吗?
我使用了OpenCV样本中的Interactivegrabcut.py来分割图像并保存了前景和背景模型。然后我使用这些模型来分割更多相同种类的图像,因为我不想每次都重新训练模型。
运行抓取算法后,该掩码全为零(所有背景),因此不会分割任何内容。
from matplotlib import pyplot as plt
import numpy as np
import cv2
img = cv2.imread('usimg1.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.load('bgdmodel.npy')
fgdModel = np.load('fgdmodel.npy')
cv2.grabCut(img, mask, None, bgdModel, fgdModel, 5, cv2.GC_EVAL)
mask = np.where((mask==2) | (mask==0), 0, 1).astype('uint8') 
img = img * mask[:, :, np.newaxis]
plt.imshow(img)
plt.show()
我尝试使用蒙版或矩形初始化算法,但这会产生错误,因为模型不是空的(这是我真正想要的)。
如何将预训练的模型传递给算法,以免每次分割图像时都不会重新训练它们?
编辑 在rayryeng的评论之后,我实现了以下代码:
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 0, cv2.GC_INIT_WITH_RECT)
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 2, cv2.GC_EVAL)
看来可行,但第一个电话现在更改了我的模型。在源代码中,它调用时learnGMMs不会检查是否提供了预训练的模型。
我正在尝试使用 pybind11 将 python 嵌入到我的 C++ 应用程序中。使用以下 CMake 属性,我成功地针对项目的虚拟环境进行编译。
-DPYTHON_EXECUTABLE:FILEPATH=C:/Python/Envs/myproject/Scripts/python.exe
当我运行该应用程序时,出现错误(如下),但没有具体错误。但是我认为它无法加载我正在加载的模块 numpy 。
abort() 已被调用
#include <iostream>
#include <pybind11/embed.h>
namespace py = pybind11;
int main() {
    py::scoped_interpreter guard{};
    auto sys = py::module::import("sys");
    py::print("Hello, World from Python!");
    py::print(sys.attr("executable"));
    py::print(sys.attr("version"));
    // works until here
    auto np = py::module::import("numpy");
    py::print(np.attr("version"));
    return EXIT_SUCCESS;
}
如果我只导入 sys 模块(位于标准库中),应用程序就可以正常工作。这是崩溃之前应用程序的输出:
Hello, World from Python!
C:\Develop\sandbox\python_binding\cmake-build-debug\bin\python_binding.exe
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914 64 bit (AMD64)]
我已将以下目录添加到我的路径中。
PATH=C:\Python\Envs\project\Scripts;C:\Python\Envs\project\Lib
我是否必须指定我正在使用的 python 解释器其他部分的路径,或者这可能是由另一个问题引起的?