[问题] 基本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