2016-07-14 117 views
0

我从openCV documentation site复制Harris角检测器的代码,但我想使跟踪条,其输出出现在同一个窗口,所以我更新的代码是的TrackBar结果未出现C++/opencv的

#include "stdafx.h" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace cv; 
using namespace std; 

/// Global variables 
Mat src, src_gray; 
int thresh = 100; 
int max_thresh = 255; 

char* corners_window = "Corners detected"; 


void cornerHarris_demo(int, void*) 
{ 

    Mat dst, dst_norm, dst_norm_scaled; 
    dst = Mat::zeros(src.size(), CV_32FC1); 

    /// Detector parameters 
    int blockSize = 2; 
    int apertureSize = 3; 
    double k = 0.04; 

    /// Detecting corners 
    cornerHarris(src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT); 

    /// Normalizing 
    normalize(dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat()); 
    convertScaleAbs(dst_norm, dst_norm_scaled); 

    /// Drawing a circle around corners 
    for(int j = 0; j < dst_norm.rows ; j++) 
    { for(int i = 0; i < dst_norm.cols; i++) 
    { 
     if((int) dst_norm.at<float>(j,i) > thresh) 
     { 
      circle(src, Point(i, j), 5, Scalar(255,0,0), 2, 8, 0); 
     } 
    } 
    } 
    /// Showing the result 
    imshow(corners_window, src); 
} 
/** @function main */ 
int main(int argc, char** argv) 
{ 
    /// Load source image and convert it to gray 
    char* filename = "myimage.jpg"; 
    src_gray = imread(filename, 0); 
    cvtColor(src_gray,src,CV_GRAY2RGB); 

    /// Create a window and a trackbar 
    namedWindow(corners_window, CV_WINDOW_AUTOSIZE); 
    createTrackbar("Threshold: ", corners_window, &thresh, max_thresh, cornerHarris_demo); 
    cornerHarris_demo(0, 0); 

    waitKey(0); 
    return(0); 
} 

问题是输出窗口处于非活动状态,我无法打开它并使用轨迹栏进行播放,但是我可以从任务栏中看到它。 enter image description here

回答

1

此更新工作

#include "stdafx.h" 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace cv; 
using namespace std; 

/// Global variables 
Mat src, src_gray; 
int thresh = 200; 
int max_thresh = 255; 


/// Function header 
void cornerHarris_demo(int, void*); 

/** @function main */ 
int main(int argc, char** argv) 
{ 
    /// Load source image and convert it to gray 
    src = imread("chessboard.jpg"); 
    cvtColor(src, src_gray, CV_BGR2GRAY); 

    /// Create a window and a trackbar 
    namedWindow("Source image", CV_WINDOW_AUTOSIZE); 
    createTrackbar("Threshold: ", "Source image", &thresh, max_thresh, cornerHarris_demo); 

    cornerHarris_demo(0, 0); 

    waitKey(0); 
    return(0); 
} 

/** @function cornerHarris_demo */ 
void cornerHarris_demo(int, void*) 
{ 

    Mat dst, dst_norm, dst_norm_scaled, temp; 
    src.copyTo(temp); 
    dst = Mat::zeros(src.size(), CV_32FC1); 

    /// Detector parameters 
    int blockSize = 2; 
    int apertureSize = 3; 
    double k = 0.04; 

    /// Detecting corners 
    cornerHarris(src_gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT); 

    /// Normalizing 
    normalize(dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat()); 
    convertScaleAbs(dst_norm, dst_norm_scaled); 

    /// Drawing a circle around corners 
    for(int j = 0; j < dst_norm.rows ; j++) 
    { for(int i = 0; i < dst_norm.cols; i++) 
      { 
      if((int) dst_norm.at<float>(j,i) > thresh) 
       { 
       circle(temp, Point(i, j), 5, Scalar(255,0,0), 2, 8, 0); 
       } 
      } 
    } 
    /// Showing the result 
    imshow("Source image", temp); 
} 

还是不知道为什么第一个没有。