小编bah*_*hti的帖子

Otsu阈值处理深度图像

我试图从kinect获得的深度图像中减去背景.当我学会了什么otsu阈值时,我认为它可以用它.将深度图像转换为灰度,我希望可以应用otsu阈值来对图像进行二值化.

不过我用OpenCV 2.3实现了这个(试图实现),但是徒劳无功.然而,非常意外地将输出图像二值化.我连续进行了阈值处理(即将结果打印到屏幕上以分析每一帧),并发现对于某些帧,阈值被发现为160ish,有时它被发现为0.我不太明白为什么会发生这种情况.可能是由于kinect返回的深度图像中的0的高数量,这对应于无法测量的像素.有没有办法可以告诉算法忽略值为0的像素?或者otsu阈值对我想做的事情不好?

以下是相关代码的一些输出和部分.您可能会注意到第二个屏幕截图看起来可以做一些很好的二值化,但是我希望实现一个能够区分对应于场景中的椅子和背景的像素.

谢谢.

            cv::Mat1s depthcv(depth->getHeight(), depth->getWidth());
            cv::Mat1b depthcv8(depth->getHeight(), depth->getWidth());
            cv::Mat1b depthcv8_th(depth->getHeight(), depth->getWidth());
            depthcv.data =(uchar*) depth->getDepthMetaData().Data();
            depthcv.convertTo(depthcv8,CV_8U,255/5000.f);

            //apply otsu thresholding
            cv::threshold(depthcv8, depthcv8_th, 128, 255, CV_THRESH_BINARY|CV_THRESH_OTSU);
            std::ofstream output;
            output.open("output.txt");
            //output << "M = "<< endl << " "  << depthcv8 << endl << endl;
            cv::imshow("lab",depthcv8_th);
            cv::waitKey(1);
Run Code Online (Sandbox Code Playgroud)

图片1 这第二个截图看起来可以做一些很好的二值化

opencv kinect background-subtraction

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

尝试在OpenCv中使用sift匹配两个图像,但匹配太多

我正在尝试实现一个程序,它将输入两个图像,一个是单独一个框的图像,另一个是包含场景中的框.基本上,该程序应该在这两个图像中找到关键点,并将显示匹配关键点的图像.最后我希望看到两个输入图像的附加图像以及它们匹配的关键点连接.我的代码如下:

#include <opencv2\opencv.hpp>
#include <iostream>

int main(int argc, const char* argv[]) {
   cv::Mat input1 = cv::imread("input.jpg", 1); //Load as grayscale
   //cv::cvtColor(input1,input1,CV_BGR2GRAY);
   //second input load as grayscale
   cv::Mat input2 = cv::imread("input2.jpg",1);
   cv::SiftFeatureDetector detector;
   //cv::SiftFeatureDetector
   detector(
      1, 1,
      cv::SIFT::CommonParams::DEFAULT_NOCTAVES,
      cv::SIFT::CommonParams::DEFAULT_NOCTAVE_LAYERS,
      cv::SIFT::CommonParams::DEFAULT_FIRST_OCTAVE,
      cv::SIFT::CommonParams::FIRST_ANGLE );
   std::vector<cv::KeyPoint> keypoints1;
   detector.detect(input1, keypoints1);
   // Add results to image and save.
   cv::Mat output1;
   cv::drawKeypoints(input1, keypoints1, output1);
   cv::imshow("Sift_result1.jpg", output1);
   cv::imwrite("Sift_result1.jpg",output1);
   //keypoints array for input 2
   std::vector<cv::KeyPoint> keypoints2;
   //output array for ouput 2
   cv::Mat output2;
   //Sift extractor of opencv
   cv::SiftDescriptorExtractor extractor; …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing sift

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

每个顶点着色与大型模型上的每个片段着色

我是GLSL的新手并编写了一个小应用程序,它将显示一个3d模型,并有一些用户输入旋转,缩放等.模型相当大(例如600万个顶点,1500万个面).现在,我正在使用每个顶点着色,我的个人电脑上的性能还可以.但我可能需要使用更大的模型(具有10-15百万个顶点).

我的问题与每顶点和每片段着色之间的性能比较有关.从严格的资源,以及搜索网络,我得出结论,每片段阴影具有更好的输出,特别是对于镜面高光,但是它的性能较低,因为它计算多边形的每个像素而不是每个顶点(如在每个顶点着色中).

也许我认为完全错了,但如果顶点数量很大,我应该期望每个片段着色运行得更快,例如在我的情况下(6-10百万个顶点)?每个片段着色的性能取决于绘制到屏幕的像素数,而每个顶点着色不是?

opengl glsl

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