[問題] 基本RGB調色盤顯示(細部問題及程式優化)

作者: redonizuka (R大)   2015-04-14 22:31:03
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) codeBlocks
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) OpenCV
問題(Question):
大家好:
目前利用opencv來學習影像處理以及辨識,試寫了一個調色盤程式來學習
但其中有兩點問題想要詢問大家,程式碼如下
#include <stdio.h>
#include <stdlib.h>
#include <highgui.h>
#include <cv.h>
char TrackBarNameB[]="B";
char TrackBarNameG[]="G";
char TrackBarNameR[]="R";
void onTrackBarB(int position);
void onTrackBarG(int position);
void onTrackBarR(int position);
IplImage *Image1;
int main()
{
cvNamedWindow("Show Image",0);
CvSize Image1Size=cvSize(640,480);
Image1=cvCreateImage(Image1Size,IPL_DEPTH_8U,3);
// cvResizeWindow("Show Image",1024,768);
cvCreateTrackbar(TrackBarNameB,"Show Image",0,255,onTrackBarB);
cvCreateTrackbar(TrackBarNameG,"Show Image",0,255,onTrackBarG);
cvCreateTrackbar(TrackBarNameR,"Show Image",0,255,onTrackBarR);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&Image1);
}
void onTrackBarB(int position)
{
int i,j;
for(i=0;i<Image1->height;i++)
{
for(j=0;j<Image1->widthStep;j=j+3)
{
Image1->imageData[i*Image1->widthStep+j]=position;
}
}
cvShowImage("Show Image",Image1);
}
void onTrackBarG(int position)
{
int i,j;
for(i=0;i<Image1->height;i++)
{
for(j=0;j<Image1->widthStep;j=j+3)
{
Image1->imageData[i*Image1->widthStep+j+1]=position;
}
}
cvShowImage("Show Image",Image1);
}
void onTrackBarR(int position)
{
int i,j;
for(i=0;i<Image1->height;i++)
{
for(j=0;j<Image1->widthStep;j=j+3)
{
Image1->imageData[i*Image1->widthStep+j+2]=position;
}
}
cvShowImage("Show Image",Image1);
}
第一個問題:void onTrackBarR(int position)、void onTrackBarG(int position)、
void onTrackBarB(int position)
這三個副程式內容物幾乎一樣,有辦法將這三個富城是結合在一起,變成呼叫一個副程式
即可以達到三原色數值擷取及顯示的功能嗎?
若能想詢問如何修改?
第二個問題:這個程式在調整影像尺寸的時候, 我以CvSize
Image1Size=cvSize(640,480); 此函數來定義,但當我直接對此函數進行尺寸修改的時候
,如CvSize Image1Size=cvSize(320,240);時,他仍然顯示640,480的尺寸,反而要透過
cvResizeWindow("Show Image",1024,768);才會進行變更,以確定有重新build,想請問
此點原因?
作者: TobyH4cker (Toby (我要當好人))   2015-04-15 02:29:00
一、多加一個參數,B就傳0,G傳1,R傳2,你懂的
作者: redonizuka (R大)   2015-04-15 04:19:00
Thanks :))
作者: VSei (Chaos)   2015-04-15 09:51:00
typedef void (CV_CDECL *CvTrackbarCallback)(int pos);所以應該不能多加一個參數吧?2.的問題可以在cvCreateImage直接先上一行cvShowImage可能是沒有showImage的動作windows沒有帶入參數更新另外建議可以在cvCreateTrackbar前先將整張圖片都寫入0起始畫面有初值才會顯示正常
作者: TobyH4cker (Toby (我要當好人))   2015-04-15 10:12:00
原來那個是事件喔,我沒寫過CV不知道
作者: VSei (Chaos)   2015-04-15 10:20:00
作者: TobyH4cker (Toby (我要當好人))   2015-04-16 01:47:00
硬要的話就global variable了,執行一行 cvCreateTrackbar就遞增

Links booklink

Contact Us: admin [ a t ] ucptt.com