2016-07-14 27 views
0

ich den Code von Harris Eckendetektor von openCV documentation site kopiert, aber ich wollte die trackbar und seine Ausgabe erscheint im selben Fenster machen, damit ich den Code aktualisiertTrackbar Ergebnis erscheint nicht 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); 
} 
zu sein

Das Problem ist, das Ausgabefenster ist inaktiv, ich kann es nicht öffnen und mit der Trackbar spielen, aber ich kann es von der Taskleiste aus sehen. enter image description here

Antwort

1

Dieses Update funktioniert

#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); 
} 

wissen immer noch nicht, warum die erste nicht.