小编mev*_*ron的帖子

空消息异常

我发现异常消息在C#中不能为null,并且在尝试了此之后

 var ex = new Exception(null);
 Console.WriteLine(ex.Message);
Run Code Online (Sandbox Code Playgroud)

我收到以下消息:

引发了类型为“ System.Exception”的异常。

但是在这种情况下

 var ex = new Exception(string.Empty);
 Console.WriteLine(ex.Message);
Run Code Online (Sandbox Code Playgroud)

该消息是空的。

如何解释呢?您认为这是预期的行为吗?

c# exception

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

Google的protobuf库中的MergeFrom*与ParseFrom*

我似乎无法在protobuf中找到MessageLiteMergeFrom*ParseFrom*方法之间的明确区别.

我试图最小化我必须做的数据复制量,所以我在下面编写了以下代码来解码长度前缀消息:

bool StreamMessageDelimiter::receiveWithLengthPrefix(Message& message)
{
    google::protobuf::uint32 messageSize;
    auto_ptr<google::protobuf::uint8> prefixBuf(new google::protobuf::uint8[sizeof(messageSize)]);
    int receivedBytes = receiveNBytes(prefixBuf.get(), sizeof(messageSize));
    if(receivedBytes != sizeof(messageSize))
    {
        return false;
    }

    CodedInputStream prefixInput(prefixBuf.get(), sizeof(messageSize));
    prefixInput.ReadLittleEndian32(&messageSize);

    google::protobuf::uint8* payloadBuf = new google::protobuf::uint8[messageSize];
    receivedBytes = receiveNBytes(payloadBuf, messageSize);
    if(receivedBytes != messageSize)
    {
        return false;
    }

    ArrayInputStream rawInput(payloadBuf, messageSize);
    CodedInputStream codedInput(&rawInput);

    if(!message.MergeFromCodedStream(&codedInput))
    {
        return false;
    }

    return true;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是使用MergeFromCodedStream原因message来获取所有权payloadBuf,还是message制作基础数据的副本?如果message确确实让副本,那么我显然应该使用auto_ptrpayloadBuf像我一样的prefixBuf.

感谢您的投入!

c++ protocol-buffers

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

如何在OpenCV中将高斯滤波器应用于DFT输出

我想在确定正确的填充尺寸后创建高斯高通滤波器(例如,如果图像宽度和高度是10X10,那么应该是20X20).

我有Matlab代码,我试图在OpenCV中移植,但我很难正确移植它.我的Matlab代码如下所示:

f1_seg = imread('thumb1-small-test.jpg');

Iori = f1_seg;


% Iori = imresize(Iori, 0.2);

%Convert to grayscale
I = Iori;
if length(size(I)) == 3
    I = rgb2gray(Iori);
end
% 

%Determine good padding for Fourier transform

PQ = paddedsize(size(I));

I = double(I);

%Create a Gaussian Highpass filter 5% the width of the Fourier transform

D0 = 0.05*PQ(1);

H = hpfilter('gaussian', PQ(1), PQ(2), D0);

% Calculate the discrete Fourier transform of the image.

F=fft2(double(I),size(H,1),size(H,2));

% Apply the highpass filter to the Fourier spectrum …
Run Code Online (Sandbox Code Playgroud)

opencv image fft gaussian dft

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

如何在Windows窗体应用程序中显示cv :: Mat?

我试图imwrite成功地在Windows窗体上显示图像,但它损坏了磁盘,所以我需要一个更好的方法来做到这一点.

下面是我当前的代码,它将图像临时写入硬盘:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

        namedWindow("video",0);
        VideoCapture cap(0);
        flag = true;
        while(flag){
            Mat frame;
            cap >> frame; // get a new frame from camera
            **imwrite("vdo.jpg",frame);**
            this->panel1->BackgroundImage = System::Drawing::Image::FromFile("vdo.jpg");

            waitKey(5);
            delete panel1->BackgroundImage;
            this->panel1->BackgroundImage = nullptr;

        }
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试使用Mat内存中的OpenCV时,我无法让它工作.以下代码片段是我到目前为止所尝试的:

this->panel1->BackgroundImage = System::Drawing::Bitmap(frame);
Run Code Online (Sandbox Code Playgroud)

要么

this->panel1->BackgroundImage = gcnew System::Drawing::Bitmap( frame.widht,frame.height,System::Drawing::Imaging::PixelFormat::Undefined, ( System::IntPtr ) frame.imageData);
Run Code Online (Sandbox Code Playgroud)

我希望frame在不使用的情况下显示在此代码中imwrite.我该如何做到这一点?

c++ opencv video-capture image-processing face-recognition

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

generate_export_header 典型用法

我正在尝试使用generate_export_header函数。我的库源代码位于该src文件夹中,因此 CMake 在 处生成导出标头src/mylib_export.h。为了使用此导出标头,我是否只需将其复制到我的库的include文件夹中以在实现代码中使用?这是我正在使用的 CMake 代码片段:

ADD_LIBRARY(${PROJECT_NAME} ${LIB_TYPE} ${SOURCES})
GENERATE_EXPORT_HEADER(${PROJECT_NAME})

FILE(COPY 
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h 
    DESTINATION 
    ${PROJECT_SOURCE_DIR}/include
)
Run Code Online (Sandbox Code Playgroud)

有没有更多的 CMake 方法来做到这一点?

dll cmake

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

清洁后,MSBuild ItemGroup为空

我看到ItemGroup标签有一些奇怪的行为.

我的应用程序依赖于几个DLL,我将这些DLL以及可执行文件复制到部署目录,NSIS使用该目录从新构建创建安装包.但是,我遇到了一个奇怪的问题.

我定义我的ItemGroup如下(在我定义构建目标之前在文件的顶部:

<MyAppFiles Include="$(ProjectRoot)\$(OutputPath)\*.dll;$(ProjectRoot)\$(OutputPath)\MyApp.exe" />
Run Code Online (Sandbox Code Playgroud)

因此,这会抓取目录中的所有DLL以及二进制文件MyApp.exe.但是,如果项目已被清理(即,没有文件$(OutputPath)).DLL不包含在ItemGroup文件列表中.现在,如果我用另一个构建来跟进它(即,有来自前一个构建的文件$(OutputPath)),则ItemGroup包含我想要的所有文件.

此外,我已检查构建脚本的输出,并将DLL复制到$(OutputPath)是否发生了清理.

所以,我的问题是,如何更正我的构建脚本,以便ItemGroup始终包含DLL?ItemGroup在构建发生之前,似乎填充了文件,因此如果在构建之前文件不存在,它们不会包含在列表中,但如果它们在构建之前存在,那么它们就是.

作为参考,这是我正在使用的构建目标:

<PropertyGroup>
    <MyAppRoot>..\MyApp</MyAppRoot>
    <MyAppProject>$(MyAppRoot)\MyApp.csproj</MyAppProject>
<PropertyGroup>

<Target Name="BuildProject">
    <Message Text="BEFORE: @(ProjectFiles)" />
    <MSBuild Projects="$(MyAppProject)" Targets="Build" Properties="Configuration=$(Configuration)">
      <Output TaskParameter="TargetOutputs" ItemName="MyAppAssembly"/>
    </MSBuild>
    <Message Text="AFTER: @(ProjectFiles)" />
  </Target>
Run Code Online (Sandbox Code Playgroud)

msbuild visual-studio

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

Python嵌套包问题

我一直试图解决这个问题,我必须在这里遗漏一些基本的东西(原谅我,我对Python开发相对较新):

我有这样的包结构:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py
Run Code Online (Sandbox Code Playgroud)

我的课程相当温和:

class Class1(object):

    def __init__(self):

    # some methods...


class Class2(object):

    def __init__(self):

    # more methods...
Run Code Online (Sandbox Code Playgroud)

Main.py,我有:

import utils

if __name__ == '__main__':
    c1 = utils.Class1()
    c2 = utils.Class2()
Run Code Online (Sandbox Code Playgroud)

PYTHONPATH是设置包括src,src\base,和src\base\utils.但是,Python在尝试运行时给出了这个错误Main.py:

AttributeError: 'module' object has no attribute 'Class1'
Run Code Online (Sandbox Code Playgroud)

有人遇到过这个,你知道怎么解决吗?谢谢!

python nested package

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