我得到了我认为简单的情况,但似乎无法弄清楚如何完成它.我是WPF和Caliburn Micro框架的新手.在我的视图中,我有一个画布,在这个画布上我有一个图像.我想编写一些鼠标事件处理程序(MouseLeftButtonDown,MouseLeftButtonUp和MouseMove),当光标在Image中时调用它们.我已经成功地在ViewModel中创建了事件处理程序,但我似乎无法弄清楚如何在处理程序中获取当前游标位置.MouseEventArgs.GetPosition需要一个IInputElement作为参数......不知道如何获得它.
这是我的XAML(查看):
<Canvas x:Name="ImageCanvas" >
<Image Source="{Binding DataImage}"
x:Name="ContainerImage"
cal:Message.Attach=
"[Event MouseLeftButtonDown] = [Action MouseDown_Image($source, $eventArgs)];
[Event MouseLeftButtonUp] = [Action MouseUp_Image($source, $eventArgs)];
[Event MouseMove] = [Action MouseMove_Image($source, $eventArgs)]">
</Image>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
这是我的C#(viewmodel)
public void MouseDown_Image(object sender, MouseEventArgs e)
{
// How do I get cursor position here??
// convert to Image coordinates??
}
public void MouseUp_Image(object sender, MouseEventArgs e)
{
// How do I get cursor position here??
// convert to Image coordinates??
}
public void MouseMove_Image(object sender, MouseEventArgs e) …Run Code Online (Sandbox Code Playgroud) 我目前有一个基于Qt的GUI应用程序,它只提供一个图形仪表板(语言,图形等),通过TCP连接显示另一个应用程序提供的实时数据.出于体系结构和安全原因,我被告知不再允许我的TCP连接,并且HTTPS websocket将是我唯一的管道.有人建议我使用HTML5和Javascript将我的应用程序转换为webapp.但是,我不是网络程序员,但可能会认为这是学习新技术的机会.在做出决定之前,我想更好地了解景观.所以,我认为我的选择是:
将我的应用程序转换为Web应用程序,为我提供基于Web的应用程序的所有优点/缺点.对我来说更多的工作,因为这是一项新技术,我已经有了Qt/TCP版本正常工作.如果这是建议的方法,那么对于开发环境/工具的任何建议都将受到赞赏.
将我当前的Qt应用程序转换为客户端HTTPS连接而不是TCP连接.不确定这是可能的.从我读过的内容来看,QtWebKit可能无法做到这一点.好像很奇怪?
也许我还没有考虑另一种选择?
我有一个WPF应用程序,该应用程序从相机获取图像,处理这些图像并显示它们。处理部分对于CPU来说已经很繁重,因此我研究了将处理转移到GPU并针对它们运行自定义CUDA内核。基本过程如下:
1)从相机获取图像2)将图像加载到GPU 3)调用CUDA内核以处理图像4)显示处理后的图像
WPF到CUDA到显示的控制策略是我要解决的问题。看起来很自然,一旦将图像加载到GPU上,就不必为了显示图像就将其卸载。我读过可以用OpenGL完成,但是我真的需要学习OpenGL并将其包含在我的项目中以便快速显示CUDA处理的图像吗?
我了解(我认为)从C#调用CUDA内核的问题。我的计划是围绕我的CUDA调用构建一个非托管库,我稍后将其包装为C#-或-尝试确定尝试使用哪个托管包装器(managedCUDA,Cudafy等)。我担心使用其中一种预包装器,因为它们似乎都得到了轻微的支持...但是也许我有错误的印象。
无论如何,经过几天研究可能的选择,我感到有些不知所措。任何建议将不胜感激。
我在 OpenCV 中应该有一个简单的练习,但似乎无法让它工作。我正在尝试确定图像一部分中的边缘密度。这是我遵循的过程: 1. 从图像中提取子图像 2. 使用 Canny 在子图像中查找边缘 3. 创建二值图像的阈值 4. 创建二值图像的直方图 5. 获取二值图像中“开启”的像素数(255) 6. 计算“边缘密度”为 numPixelsOn/totalPixels
我已经检查了上面 1,2 和 3 的结果,结果似乎还可以。第 4 步和第 5 步似乎给我带来了麻烦。
这是我计算直方图的代码:
int histSize = 256; // bin size
float range[] = { 0, 256} ;
const float* histRange = { range };
bool uniform = true;
bool accumulate = false;
Mat hist;
/// Compute the histograms:
calcHist( &gray, 1, 0, Mat(), hist, 1, &histSize, &histRange, uniform, accumulate );
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用。当我在调用 calcHist 后检查 hist 时,它没有数据(即 …
我有一个应用程序,我正在接收图像流,我想在其中监视设置的 ROI 内检测到的特征。这是使用 ORB 检测器完成的。在第一幅图像中,我使用检测器查找给定 ROI 的“参考”关键点和描述符。对于后续图像,我找到相同 ROI 的“测试”关键点和描述符。然后,我使用 knn 匹配器来查找引用描述符和测试描述符之间的匹配。最后,我尝试找到“最佳”匹配,将关联的关键点添加到“匹配的关键点”集合中,然后计算“匹配强度”。该匹配强度旨在指示参考图像中找到的关键点与测试图像中的关键点的匹配程度。
我有几个问题:
1 - 这是特征检测器的有效使用吗?我知道简单的模板匹配可能会给我类似的结果,但我希望避免光照轻微变化的问题。
2 - 我是否正确筛选我的比赛以获取“好”比赛,然后我是否获得了该比赛的正确关联的关键点?
3 - 我的代码似乎按原样工作,但是,如果我尝试使用流转移到 OpenCV 调用的异步版本,我会得到一个异常:“函数 cv::cuda::GpuMat::setTo 中的资源句柄无效”发生在对 ORB_Impl::buildScalePyramids 的调用中(从 ORB_Impl::detectAndComputeAsync 调用)。请参阅下面的“NewFrame”函数的异步版本。这让我觉得我没有正确设置所有这些。
这是我的代码:
void Matcher::Matcher()
{
// create ORB detector and descriptor matcher
m_b = cuda::ORB::create(500, 1.2f, 8, 31, 0, 2, 0, 31, 20, true);
m_descriptorMatcher = cv::cuda::DescriptorMatcher::createBFMatcher(cv::NORM_HAMMING);
}
void Matcher::Configure(int imageWidth, int imageHeight, int roiX, int roiY, int roiW, int roiH)
{
// set member variables
m_imageWidth = imageWidth;
m_imageHeight = imageHeight; …Run Code Online (Sandbox Code Playgroud)