Articles of c + +

DirectShow ISampleGrabber:样本颠倒,颜色通道反转

我必须使用MS DirectShow从相机捕捉video帧(我只想要原始像素数据)。 我能够构buildgraphics/滤波器networking(捕获设备filter和ISampleGrabber)并实现callback(ISampleGrabberCB)。 我收到适当大小的样本。 但是,它们总是颠倒(垂直翻转,即不旋转),颜色通道是BGR顺序(不是RGB)。 我试图将BITMAPINFOHEADER中的biHeight字段设置为正值和负值,但没有任何效果。 根据MSDN文档,ISampleGrapper :: SetMediaType()忽略video数据的格式块。 这里是我看到的(用不同的相机logging的,不是DS),以及DirectShow ISampleGrabber给我的东西:“RGB”实际上分别是红色,绿色和蓝色: 我正在使用的代码示例略有简化: // Setting the media type… AM_MEDIA_TYPE* media_type = 0 ; this->ds.device_streamconfig->GetFormat(&media_type); // The IAMStreamConfig of the capture device // Find the BMI header in the media type struct BITMAPINFOHEADER* bmi_header; if (media_type->formattype != FORMAT_VideoInfo) { bmi_header = &((VIDEOINFOHEADER*)media_type->pbFormat)->bmiHeader; } else if (media_type->formattype != […]

我如何正确安装C编译器来安装Windows的Python包?

我相信我没有正确安装我的C编译器。 我试图在我的Windows 8机器上安装一些Python 2.7包。 我不断收到以下错误: “RuntimeError:损坏的工具链:无法链接一个简单的C程序”。 Python已经正确安装,并且一直运行良好。 我一直在使用“virutalenv”包,并在虚拟环境中工作。 然后,我尝试安装Cygwin,MinGW和MS Visual Studios 2012,其中没有一个似乎在virtualenv中工作。 我不知道我在做什么错,任何帮助将是伟大的。 谢谢,吉米

Dev C ++控制台窗口属性

我在Windows7上使用Dev C ++ v5.6.1 IDE。 我写了一个C代码,其中有数百行显示在屏幕上的输出。 Console Windows的缓冲区大小很小,我无法查看最初的printf语句。 我试过从“属性”选项更改,但没有帮助。 我在哪里可以find增加控制台窗口缓冲区大小的选项。

易失性和caching行为

我读过post C volatilevariables和Cache Memory 但是我很困惑。 题: 操作系统是否会照顾自己 程序员必须以这样的方式编写程序:variables不应该像提到variables一样被放入caching中,如_Uncached。 问候 学习者

在设备驱动程序中使用stdlib.h

我试图写一个设备驱动程序,我需要在驱动程序中使用system()函数。 要使用system()我们需要包含<stdlib.h> ,这个dosnt似乎是从驱动程序中运行的。 它说没有find这样的文件或目录。 是否有替代stdlib.h设备驱动程序? 或system()的替代?

为什么我们不能通过Linux中的system()系统调用来更改目录?

system ("cd .."); 这不会产生任何错误,但也没有任何意义。 为什么?

用于由MPI创build的进程的共享内存访问控制机制

我有一个由多个进程使用的共享内存,这些进程是使用MPI创build的。 现在我需要一个机制来控制这个共享内存的访问。 我知道named semaphore和flock机制可以用来做这个,但只是想知道MPI是否提供了共享内存使用的任何特殊的locking机制? 我在Linux下工作。

Memcpy与memset相同

我想用memcpy来测量内存带宽。 我从这个答案修改了代码: 为什么vector化循环没有使用memset来衡量带宽的性能改进 。 问题是memcpy只比memset稍慢,因为我认为memcpy运行速度是内存两倍以上的两倍。 更具体地说,我运行了超过1 GB的数组a和b (分配将calloc )100次,执行以下操作。 operation time(s) —————————– memset(a,0xff,LEN) 3.7 memcpy(a,b,LEN) 3.9 a[j] += b[j] 9.4 memcpy(a,b,LEN) 3.8 请注意, memcpy只比memset慢一点。 a[j] += b[j] (其中j越过[0,LEN) )的操作应该比memcpy长三倍,因为它操作的数据量是三倍。 但是它只有memset 2.5左右。 然后我用memset(b,0,LEN)将b初始化为零并再次testing: operation time(s) —————————– memcpy(a,b,LEN) 8.2 a[j] += b[j] 11.5 现在我们看到, memcpy大约是memset两倍, a[j] += b[j]大约是memset三倍。 至less我会预期,在memset(b,0,LEN) , memcpy会比较慢,因为 100次迭代中的第一次迭代的延迟分配(第一次触发) 。 为什么我只能在memset(b,0,LEN)之后得到预期的时间? test.c的 #include <time.h> […]

xlib是否有一个活动的窗口事件?

我正在尝试编写一个程序来跟踪活动窗口使用Xlib时的变化。 我很难找出最好的方法来做到这一点。 这些是我的想法到目前为止: 每秒钟使用_NET_ACTIVE_WINDOW来获取活动窗口,如果它已经改变,然后运行事件的相关代码。 获取所有窗口的列表,并听取他们的重点事件。 我将不得不弄清楚如何保持最新的打开窗口列表。 他们是一个更简单/更好的方法? 我是用Xlib编程的新手。

在Linux上编译一个基本的OpenCV + Cuda程序

我曾经在linux上使用过opencv,但是没有使用cuda。 我已经努力了几个月的以下编译错误。 在尝试了许多解决scheme后,我放弃了使用windows。 不过,我真的想在Linux上工作。 这是我用来编译opencv_gpu网站上给出的阈值示例的命令。 nvcc `pkg-config –libs opencv` -L. -L/usr/local/cuda/lib -lcuda -lcudart `pkg-config –cflags opencv` -I. -I/usr/local/cuda/include threshold.cpp -o threshold 这里是错误的: /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `main': threshold.cpp:(.text+0x124): undefined reference to `cv::gpu::Stream::Null()' threshold.cpp:(.text+0x156): undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)' threshold.cpp:(.text+0x16d): undefined reference to `cv::gpu::GpuMat::download(cv::Mat&) const' /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::GpuMat(cv::Mat const&)': threshold.cpp:(.text._ZN2cv3gpu6GpuMatC1ERKNS_3MatE[cv::gpu::GpuMat::GpuMat(cv::Mat const&)]+0x63): […]