OpenCVスライダーTrackbar C/C+/Python
OpenCVスライダーTrackbar C/C+/Python
参考:
opencvスライダーcvCreateTrackbar():http://blog.csdn.net/u012005313/article/details/46788445 createTrackbar:http://docs.opencv.org/2.4.11/modules/highgui/doc/user_interface.菗createtrackbar Adding a Trackbar to our aplications!:http://docs.opencv.org/2.4.11/doc/tutorials/highgui/trackbar/trackbar.html#adding-a-trocbar-to-our-appration s
スライダー制御パラメータの変更を使って、コールバック関数を呼び出して表示された画像を修正します。
主な内容 を起動する。 を起動する。 を起動する。 を有する。 である。 where the first parameter is the trocbar position and the second parameter is the user data. If the calback is the NULL pointer、no calbacks are caled、but only value is udated` trocbar_name:同 window_name:同 value:同 count:同 on_change:関数の原型は です。
プログラム
複数のパラメータを変更する必要がある場合は、複数のスライダーを使用することができます。
プログラム
プログラム
プログラム
参考:get TrackbarPos
一つ目:スライダー名二つ目:ウィンドウ名
戻り値:スライドバーの現在位置を指定します。
参考:
opencvスライダーcvCreateTrackbar():http://blog.csdn.net/u012005313/article/details/46788445 createTrackbar:http://docs.opencv.org/2.4.11/modules/highgui/doc/user_interface.菗createtrackbar Adding a Trackbar to our aplications!:http://docs.opencv.org/2.4.11/doc/tutorials/highgui/trackbar/trackbar.html#adding-a-trocbar-to-our-appration s
スライダー制御パラメータの変更を使って、コールバック関数を呼び出して表示された画像を修正します。
主な内容
C/C++/Python
関数形式C++
でスライダーC
でスライダーPython
でスライダーgetTrackbarPos
C/C++/Python
関数形式C++
関数:int createTrackbar(const string& trackbarname, const string& winname,
int* value, int count, TrackbarCallback onChange=0, void* userdata=0)
パラメータ:trackbarname
:スライダー名、スライダーの識別子、異なるスライダーは異なるスライダー名winname
:ウィンドウ名、スライダーがバインディングしたいウィンドウの名前value
:オプションで、スライダの位置を反映します。スライダーを作成するときは、この値でスライダ位置を指定します。count
:スライダ最大値です。最小値は通常0
onChange
:コールバック関数、関数のプロトタイプはvoid Foo(int,void*)
です。userdata:User data that is passed as is to the callback.
- It can be used to handle trackbar events without using global variables.
C
関数:int cvCreateTrackbar(const char* trackbar_name, const char* window_name,
int* value, int count, CvTrackbarCallback on_change=NULL )
パラメータ:void Foo(int)
Python
関数:def createTrackbar(trackbarName, windowName, value, count, onChange)
パラメータ:同じです。onChange
コールバック関数にはパラメータがあります。C++
でスライダーを呼び出します。プログラム
1
:形態膨張動作を行い、反復回数を変更する。#include
#include
#include
using namespace std;
using namespace cv;
//
const string trackbarname = "expand";
//
const string winname = "TrackbarDemo";
//
const int maxNum = 10;
//
int value = 3;
Mat img;
Mat res;
int dilation_type = MORPH_RECT;
int dilation_size = 1;
Mat element = getStructuringElement(dilation_type,
Size(2 * dilation_size + 1, 2 * dilation_size + 1),
Point(dilation_size, dilation_size));
void onExpand(int, void*) {
printf("value: %d
", value);
dilate(img, res, element, Point(-1, -1),value);
imshow(winname, res);
}
int main(int argc, char* argv[]) {
img = imread("c:\\lena.jpg", -1);
if (img.empty()) {
exit(0);
}
res = img.clone();
namedWindow(winname);
createTrackbar(trackbarname, winname, &value, maxNum, onExpand, NULL);
onExpand(0, NULL);
waitKey(0);
return 0;
}
結果:複数のパラメータを変更する必要がある場合は、複数のスライダーを使用することができます。
プログラム
2
:反復回数及び核サイズの変更#include
#include
#include
using namespace std;
using namespace cv;
//
const string trackbarname1 = "interation";
const string trackbarname2 = "dilationSize";
//
const string winname = "TrackbarDemo";
//
const int maxNum1 = 10;
const int maxNum2 = 5;
//
int interationValue = 3;
int dilationSize = 2;
Mat img;
Mat res;
int dilation_type = MORPH_RECT;
void onDilate(int, void*) {
printf("dilationSize: %d
", dilationSize);
printf("interationValue: %d
", interationValue);
Mat element = getStructuringElement(dilation_type,
Size(2 * dilationSize + 1, 2 * dilationSize + 1),
Point(dilationSize, dilationSize));
dilate(img, res, element, Point(-1, -1), interationValue);
imshow(winname, res);
}
int main(int argc, char* argv[]) {
img = imread("c:\\lena.jpg", -1);
if (img.empty()) {
exit(0);
}
res = img.clone();
namedWindow(winname);
createTrackbar(trackbarname1, winname, &interationValue, maxNum1, onDilate, NULL);
createTrackbar(trackbarname2, winname, &dilationSize, maxNum2, onDilate, NULL);
onDilate(0, NULL);
waitKey(0);
return 0;
}
結果:C
でスライダーを呼び出します。プログラム
1
:形態膨張動作を行い、反復回数を変更する。#include
#include
#include
#include
//
const char* trackbarname = "interation";
//
const char* winanme = "TrackbarDemo";
//
const int maxNum = 10;
int interationValue = 3;
IplImage* img;
IplImage* res;
IplConvKernel* element;
void onDilate(int arg) {
printf("interationValue: %d
", interationValue);
cvDilate(img, res, element, interationValue);
cvShowImage(winanme, res);
}
int main(int argc, char* argv[]) {
img = cvLoadImage("c:\\lena.jpg", CV_LOAD_IMAGE_UNCHANGED);
if (img->imageData == NULL) {
exit(0);
}
res = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
int dilationSize = 1;
int row = dilationSize * 2 + 1;
int col = dilationSize * 2 + 1;
element = cvCreateStructuringElementEx(2 * dilationSize + 1,
2 * dilationSize + 1, dilationSize, dilationSize, CV_SHAPE_RECT, NULL);
cvNamedWindow(winanme, CV_WINDOW_AUTOSIZE);
cvCreateTrackbar(trackbarname, winanme, &interationValue, maxNum, onDilate);
onDilate(0);
cvWaitKey(0);
cvReleaseStructuringElement(&element);
cvReleaseImage(&img);
cvReleaseImage(&res);
cvDestroyWindow(winanme);
return 0;
}
プログラム2
:反復回数及び核サイズの変更#include
#include
#include
#include
//
const char* trackbarname1 = "interation";
const char* trackbarname2 = "dilationSize";
//
const char* winanme = "TrackbarDemo";
//
const int maxNum1 = 10;
const int maxNum2 = 5;
int interationValue = 3;
int dilationSize = 1;
IplImage* img;
IplImage* res;
IplConvKernel* element;
void onDilate(int arg) {
printf("interationValue: %d
", interationValue);
printf("dilationSize: %d
", dilationSize);
int row = dilationSize * 2 + 1;
int col = dilationSize * 2 + 1;
element = cvCreateStructuringElementEx(2 * dilationSize + 1,
2 * dilationSize + 1, dilationSize, dilationSize, CV_SHAPE_RECT, NULL);
cvDilate(img, res, element, interationValue);
cvShowImage(winanme, res);
cvReleaseStructuringElement(&element);
}
int main(int argc, char* argv[]) {
img = cvLoadImage("c:\\lena.jpg", CV_LOAD_IMAGE_UNCHANGED);
if (img->imageData == NULL) {
exit(0);
}
res = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels);
cvNamedWindow(winanme, CV_WINDOW_AUTOSIZE);
cvCreateTrackbar(trackbarname1, winanme, &interationValue, maxNum1, onDilate);
cvCreateTrackbar(trackbarname2, winanme, &dilationSize, maxNum2, onDilate);
onDilate(0);
cvWaitKey(0);
cvReleaseImage(&img);
cvReleaseImage(&res);
cvDestroyWindow(winanme);
return 0;
}
Python
でスライダーを呼び出します。プログラム
1
:形態膨張動作を行い、反復回数を変更する。# -*- coding: utf-8 -*-
import cv2
import os
trackbar_name = "interation"
win_name = "TrackbarDemo"
max_num = 10
value = 3
kernerl = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
def on_dialte(arg):
"""
:param arg:
:return:
"""
value = cv2.getTrackbarPos(trackbar_name, win_name)
print "value:", value
res = cv2.dilate(img, kernerl, None, None, value)
cv2.imshow(win_name, res)
if __name__ == '__main__':
img = cv2.imread("c:\\lena.jpg", cv2.CV_LOAD_IMAGE_UNCHANGED)
if img is None:
os._exit(0)
cv2.namedWindow(win_name)
cv2.createTrackbar(trackbar_name, win_name, value, max_num, on_dialte)
on_dialte(0)
cv2.waitKey(0)
プログラム2
:反復回数及び核サイズの変更# -*- coding: utf-8 -*-
import cv2
import os
trackbar_name1 = "interation"
trackbar_name2 = "dilationSize"
win_name = "TrackbarDemo"
max_num1 = 10
max_num2 = 5
interation_value = 3
dilation_size = 1
def on_dilate(arg):
"""
:param arg:
:return:
"""
value = cv2.getTrackbarPos(trackbar_name1, win_name)
print "value:", value
size = cv2.getTrackbarPos(trackbar_name2, win_name)
print "size:", size
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2 * size + 1, 2 * size + 1))
res = cv2.dilate(img, kernel, None, None, value)
cv2.imshow(win_name, res)
if __name__ == '__main__':
img = cv2.imread("c:\\lena.jpg", cv2.CV_LOAD_IMAGE_UNCHANGED)
if img is None:
os._exit(0)
cv2.namedWindow(win_name)
cv2.createTrackbar(trackbar_name1, win_name, interation_value, max_num1, on_dilate)
cv2.createTrackbar(trackbar_name2, win_name, dilation_size, max_num2, on_dilate)
on_dilate(0)
cv2.waitKey(0)
get TrackbarPos参考:get TrackbarPos
C++
関数:int getTrackbarPos(const string& trackbarname, const string& winname)
C
関数:int cvGetTrackbarPos(const char* trackbar_name, const char* window_name)
Python
関数:cv2.getTrackbarPos(trackbarname, winname) → retval
パラメータ:一つ目:スライダー名二つ目:ウィンドウ名
戻り値:スライドバーの現在位置を指定します。