现在做的事情就是把以前的一些小东西放到博客上来,也是相当于把自己以前的笔记再温故一遍,很多代码都是拷贝别人的,但是现在有点忘记他们的博客地址,如果哪一天有朋友知道了他们的出处,请留言或者私信我一声,即便是小代码,我们也应当尊重版权,学了一年,闭起双眼,仍然只是觉得很多代码很熟悉,而不能达到牢记于心的境界,有待提高,加油吧!少年
大晚上的,如果看代码看累了,不妨玩会儿游戏,然后小憩一会儿(我喜欢玩崩坏3)
好的,继续今天的代码,创建滑动条控制两幅图像的叠加权值
话不多说,该有的解释放在代码上就好了
我用的两张图片,依然是用实验室液晶透镜采集的老虎 恐龙模型
后面你会慢慢发现,我所用到的图片似乎都有那么一丝立体感
前对焦:
后对焦:
完整工程代码
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#define WINDOW_NAME "Mixed Images"
// global variables
const int g_nMaxAlphaValue = 50; // maximun alpha value
int g_nAlphaValueSlider; // value from trackbar
double g_dAlphaValue;
double g_dBetaValue;
// Mat objects for images
cv::Mat g_srcImage1;
cv::Mat g_srcImage2;
cv::Mat g_dstImage;
// on trackbar
void on_Trackbar( int, void* )
{
g_dAlphaValue = (double) g_nAlphaValueSlider/g_nMaxAlphaValue;
g_dBetaValue = (1.0-g_dAlphaValue);
addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
cv::imshow(WINDOW_NAME, g_dstImage);
}
// main
int main( int argc, char** argv )
{
// load image and show
g_srcImage1 = cv::imread("near.jpg");
g_srcImage2 = cv::imread("far.jpg");
// NOTE: two image should be the same size
if(!g_srcImage1.data)
{
printf("Error getting the first images. Put the image wuliEddie1.jpeg to Debug folder. \n");
return -1;
}
if(!g_srcImage1.data)
{
printf("Error getting the second images. Put the image wuliShishi1.jpeg to Debug folder. \n");
return -1;
}
// initialize trackbar value
g_nAlphaValueSlider = 48;
// create window
cv::namedWindow(WINDOW_NAME, 1);
// create trackbar
char TrackbarName[50];
sprintf( TrackbarName, "Alpha Value %d", g_nMaxAlphaValue );
cv::createTrackbar( TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_Trackbar );
/*第一个参数滑动条的名称
*第二个参数窗口的名称
*第三个参数为获取滑动条当前位置的值
*第四个参数为滑动条的最大值
*第五个参数为滑动条的回调函数,主要功能都在回调函数中实现
*/
// to show the initial image
on_Trackbar(g_nAlphaValueSlider, 0);
cv::waitKey(0);
return 0;
}
最后结果:
话不多数,实在是没啥好说的,很简单的一个东西