

滑動條是opencv動態調節引數特別好用的一種工具,它依附于視窗而存在,
我們這里便是應用滑動條實作了小鳥游六花兩張美圖的轉化(doge
創建滑動條:createTrackbar()函式
int createTrackbar(const string&trackname,const string&winname,int*value,int count,TrackbarCallback onchange=0,void*userdata=0);
第一個引數:軌跡條名稱
第二個引數:視窗名稱
第三個引數:滑塊位置
第四個引數:滑塊最大值
第五個引數:回呼函式
第六個引數:傳給回呼函式的資料,當value為全域變數是不用寫
完整代碼如下:(感覺注釋寫的還算詳細)
#include <iostream>
#include<opencv2\opencv.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2\highgui\highgui.hpp>
using namespace std;
using namespace cv;
#define WINDOW_NAME "邪王真眼是最強的"
const int g_maxvalue = 100;//Alpha值的最大值
int g_nsilder;//滑動條對應的變數
double g_davalue;
double g_bvalue;
//宣告儲存影像的變數
Mat src1;
Mat src2;
Mat dst;
//全域變數宣告部分
void on_Trackbar(int, void*)
{
g_davalue = (double)g_nsilder / g_maxvalue;//求出當前alpha值相對于最大值的比例
g_bvalue = (1.0 - g_davalue);//則beta值為1-alpha
addWeighted(src1, g_davalue, src2, g_bvalue, 0.0, dst);//線性混合
imshow(WINDOW_NAME, dst);
}
//回應滑動條的回呼函式
int main(int argc,char **argv)
{
//加載影像(兩影像尺寸需相同)
src1 = imread("3.jpg");
src2 = imread("4.jpg");
g_nsilder = 70;//設定滑動條初值為70
namedWindow(WINDOW_NAME, WINDOW_NORMAL);//可以自由變化大小的視窗
char TrackbarName[50];
sprintf_s(TrackbarName, "純凈度 %d", g_maxvalue);
createTrackbar(TrackbarName, WINDOW_NAME, &g_nsilder, g_maxvalue, on_Trackbar);
//創建滑動條控制元件
on_Trackbar(g_nsilder, 0);
//結果在回呼函式中顯示
waitKey(0);
//按任意鍵退出
return 0;
}
圖片素材如下


歡迎大家的討論,謝謝大家(
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/244759.html
標籤:其他
下一篇:微信3.1.0.41逆向-微信3.1.0.41HOOK介面(WeChatHelper3.1.0.41.dll)-VC++呼叫實體方法(win32)
