本文是《OpenCV實戰從入門到精通》系列之第6篇
【OpenCV】OpenCV實戰從入門到精通之一 -- OpenCV宏的講解
【OpenCV】OpenCV實戰從入門到精通之二 -- OpenCV如何進行圖像腐蝕操作
【OpenCV】OpenCV實戰從入門到精通之三 -- canny邊緣檢測
【OpenCV】OpenCV實戰從入門到精通之四 -- 常用的函數講解(mat、imread、imshow、imwrite、nameWindow)
【OpenCV】OpenCV實戰從入門到精通之五 -- 教你使用Rect()函數
目錄
createTrackbar(軌跡條名字,窗口名字,滑塊位置,滑塊最大值,回調函數,傳給回調函數的值)
//務必要找兩幅圖是一樣大小的,並且有明顯的區別,以讓自己的結果明顯
首先看一下creatTrackbar() 原型
C++: int createTrackbar(conststring& trackbarname, conststring& winname,
int* value, int count, TrackbarCallback onChange=0,void* userdata=0);
createTrackbar(軌跡條名字,窗口名字,滑塊位置,滑塊最大值,回調函數,傳給回調函數的值)
第一個參數:const string&類型的trackbarname,表示軌跡條的名字,用來代表我們創建的軌跡條。
第二個參數:const string&類型的winname,填窗口的名字,表示這個軌跡條會依附到哪個窗口上
第三個參數,int* 類型的value,指向整型的指針,表示滑塊的位置。並且創建時,滑塊的初始位置就是該變量當前的值。
第四個參數:int類型的count,表示滑塊可以達到的最大位置的值。PS:滑塊最小的位置的值始終爲0。
第五個參數:TrackbarCallback類型的onChange,首先注意他有默認值0。這是一個指向回調函數的指針,每次滑塊位置改變時,這個函數都會進行回調。並且這個函數的原型必須爲void XXXX(int,void*);其中第一個參數是軌跡條的位置,第二個參數是用戶數據(看下面的第六個參數)。如果回調是NULL指針,表示沒有回調函數的調用,僅第三個參數value有變化。
第六個參數:void*類型的userdata,他也有默認值0。這個參數是用戶傳給回調函數的數據,用來處理軌跡條事件。如果使用的第三個參數value實參是全局變量的話,完全可以不去管這個userdata參數
//務必要找兩幅圖是一樣大小的,並且有明顯的區別,以讓自己的結果明顯
//-----------------------------------【創建滑動條】---------------------------------------
// createTrackbar()函數,透明
//----------------------------------------------------------------------------------------------
#include <opencv2\opencv.hpp>
#include "opencv2\imgproc\imgproc.hpp"
#include "opencv2\highgui\highgui.hpp"
#include <iostream>
//-----------------------------------【命名空間聲明部分】---------------------------------------
// 描述:包含程序所使用的命名空間
//-----------------------------------------------------------------------------------------------
using namespace cv;
using namespace std;
#define WINDOW_NAME "示例" //爲窗口標題定義宏
//-----------------------------------【全局函數聲明部分】--------------------------------------
// 描述:全局函數聲明
//-----------------------------------------------------------------------------------------------
const int g_nMaxAlphaValue = 100; //Alpha值得最大值
int g_nAlphaValueSlider; //滑動條對應的變量
double g_dAlphaValue;
double g_dBetaValue;
// 聲明存儲圖像的變量
Mat g_srcImage1;
Mat g_srcImage2;
Mat g_dstImage;
//-----------------------------【on_trackbar( )函數】------------------------------------
// 描述:軌跡條的回調函數
//-----------------------------------------------------------------------------------------------
void on_trackbar(int, void*)
{
// 求出當前alpha值相對於最大值的比例
g_dAlphaValue = (double)g_nAlphaValueSlider / g_nMaxAlphaValue;
// beta值爲1減去alpha值
g_dBetaValue = (1.0 - g_dAlphaValue);
// 根據alpha和beta值進行線性混合
addWeighted(g_srcImage1, g_dAlphaValue, g_srcImage2, g_dBetaValue, 0.0, g_dstImage);
// 顯示窗口
imshow( WINDOW_NAME, g_dstImage);
}
//-----------------------------------【main( )函數】--------------------------------------------
// 描述:控制檯應用程序的入口函數,我們的程序從這裏開始
//-----------------------------------------------------------------------------------------------
int main()
{
//載入圖片
g_srcImage1 = imread("1.jpg");
g_srcImage2 = imread("2.jpg");
//if (!img.data) { printf("Oh,no,讀取img圖片文件錯誤~! \n"); return -1; }
g_nAlphaValueSlider = 70;
//創建處理窗口
namedWindow(WINDOW_NAME, 1);
char TrackbarName[50];
sprintf(TrackbarName, "透明%d", g_nAlphaValueSlider);
//創建軌跡條
createTrackbar(TrackbarName, WINDOW_NAME, &g_nAlphaValueSlider, g_nMaxAlphaValue, on_trackbar);
on_trackbar(g_nAlphaValueSlider, 0);
waitKey(0);
return 0;
}
1.jpg | 2.jpg |
結果:
進度條爲10 | 進度條爲80 |