2012-04-18 15 views
6

का उपयोग कर साइन लहर खींचना मैं ओपनसीवी का उपयोग कर एक छवि पर साइन लहर बनाना चाहता हूं। मैं निम्नलिखित कोड विकसित की है, लेकिन उत्पादन की उम्मीद के रूप में नहीं आ रहा है:ओपनसीवी

#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include "opencv/cv.h" 
#include "opencv/highgui.h" 
void main() 
{ 
double y[100]; 
     float x; 


    for(x=0;x<100;x++) 
    { 
     y[(int)floor(x)]=sin(x); 

    } 

    IplImage *grf = cvCreateImage(cvSize(200, 200), IPL_DEPTH_8U, 1); 


    for(int x=0;x<100;x++) 
    { 
    cvLine(grf ,       /* the dest image */ 
      cvPoint(x, y[x]), /* start point */ 

      cvPoint(x+1, y[x+1]),   /* end point */ 
      CV_RGB(255, 0, 0),  /* the color; green */ 
      2, 4, 0);     /* thickness, line type, shift */ 

    } 


    cvNamedWindow("img", CV_WINDOW_AUTOSIZE); 
    cvShowImage("img", grf); 
    cvWaitKey(0); 
    cvDestroyWindow("img"); 
    cvReleaseImage(&grf); 
} 

मैं मान y सरणी में आ रहा है सत्यापित किया है सही है, और MATLAB का उपयोग कर इन y मूल्यों साजिश रची। MATLAB साजिश एक साइन लहर आ रही है। क्या आप मुझे बता सकते हैं कि मुझे उपरोक्त कोड का उपयोग करके सही साजिश क्यों नहीं मिल रही है।

साइन लहर की मेरी आउटपुट साजिश नीचे आ रही है: आप देख सकते हैं कि मुझे साइन लहर की बजाय क्षैतिज रेखा मिल रही है। इसके बारे में कोई मदद?

enter image description here

हल:

enter image description here धन्यवाद

उत्तर

6

sin समारोह आप एक मूल्य [-1: 1] रिटर्न:, इस प्रकार आप सेट कर रहे हैं जवाब पालन करने के बाद मैं निम्नलिखित छवि मिला आपकी छवि पर लाइन 0 और 1 के बीच निर्देशांक। आप अपने sin के आयाम में वृद्धि की जरूरत है, बदलाव यह शून्य मान है और साइन तरंग की आवृत्ति को कम (पाप के रूप में रेडियन में कोण को स्वीकार करता है, तो आप 4 चरणों में एक अवधि के पास भेज देंगे):

y[(int)floor(x)]=10 + 10*sin(2*.1*PI*x); 

तो , आप एक साइन लहर देखने में सक्षम हो जाएगा।

+0

परफेक्ट से एक तरंग लहर देना चाहिए !! आपकी त्वरित सहायता के लिए धन्यवाद – geeta

+0

@geeta आपका स्वागत है! – Alex

+0

इसके बजाय इसका उपयोग किया गया, y [(int) floor (x)] = 100 + 20 * पाप (0.4 * .1 * पीआई * एक्स) आपके सुझावों के बाद; साजिश ऊपर है। धन्यवाद – geeta

0
  • ठीक है जहां आप साइन लहर दिखाने के लिए पिक्सेल मान सेट करते हैं, ऑफसेट जोड़ें। चूंकि छवि 200x200 है, इसलिए x, y में 100,100 जोड़ने का प्रयास करें। यह आपको केंद्र से