برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی

برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

داده هایی در مورد برق، الکترونیک، الکتروتکنیک، مکاترونیک، پزشکی، کشاورزی و

تبلیغات
آخرین نظرات

۲۱ مطلب با موضوع «نرم افزار :: پردازش تصویر» ثبت شده است

تشخیص رنگ در اپن سی وی

ShahBaz | سه شنبه, ۹ شهریور ۱۳۹۵، ۰۱:۴۸ ق.ظ

Lets start by thresholding the input image for anything that is not red. Instead of the usual RGB color space we are going to use the HSV space, which has the desirable property that allows us to identify a particular color using a single value, the hue, instead of three values. As a side note, in OpenCV H has values from 0 to 180, S and V from 0 to 255. The red color, in OpenCV, has the hue values approximately in the range of 0 to 10 and 160 to 180.

Next piece of code converts a color image from BGR (internally, OpenCV stores a color image in the BGR format rather than RGB) to HSV and thresholds the HSV image for anything that is not red:

 1 	...
 2 	// Convert input image to HSV
 3 	cv::Mat hsv_image;
 4 	cv::cvtColor(bgr_image, hsv_image, cv::COLOR_BGR2HSV);
 5 
 6 	// Threshold the HSV image, keep only the red pixels
 7 	cv::Mat lower_red_hue_range;
 8 	cv::Mat upper_red_hue_range;
 9 	cv::inRange(hsv_image, cv::Scalar(0, 100, 100), cv::Scalar(10, 255, 255), lower_red_hue_range);
10 	cv::inRange(hsv_image, cv::Scalar(160, 100, 100), cv::Scalar(179, 255, 255), upper_red_hue_range);
11 	...

Preprocess the image using cv::inRange() with the necessary color bounds to isolate red. You may want to transform to a color-space like HSV or YCbCr for more stable color bounds because chrominance and luminance are better separated. You can use cvtColor() for this. Check out my answer here for a good example of using inRange() with createTrackbar().

So, the basic template would be:

Mat redColorOnly;
inRange(src, Scalar(lowBlue, lowGreen, lowRed), Scalar(highBlue, highGreen, highRed), redColorOnly);
detectSquares(redColorOnly);

EDIT : Just use the trackbars to determine the color range you want to isolate, and then use the color intervals you find that work. You don't have to constantly use the trackbars.

EXAMPLE :
So, for a complete example of the template here you go,

I created a simple (and ideal) image in GIMP, shown below: enter image description here

Then I created this program to filter all but the red squares:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

Mat redFilter(const Mat& src)
{
    assert(src.type() == CV_8UC3);

    Mat redOnly;
    inRange(src, Scalar(0, 0, 0), Scalar(0, 0, 255), redOnly);

    return redOnly;
}

int main(int argc, char** argv)
{
    Mat input = imread("colored_squares.png");

    imshow("input", input);
    waitKey();

    Mat redOnly = redFilter(input);

    imshow("redOnly", redOnly);
    waitKey();

    // detect squares after filtering...

    return 0;
}

NOTE : You will not be able to use these exact same filter intervals for your real imagery; I just suggest you tune the intervals with trackbars to see what is acceptable.

The output looks like this:

enter image description here

Viola! Only the red square remains :)

Enjoy :)


  • ShahBaz

انجمن های به اشتراک گذاشته شده

ShahBaz | پنجشنبه, ۴ شهریور ۱۳۹۵، ۰۶:۱۶ ب.ظ
  • ShahBaz

الگوریتم Viola-Jones برای تشخیص چهره

ShahBaz | سه شنبه, ۲ شهریور ۱۳۹۵، ۰۶:۱۳ ب.ظ


الگوریتم Viola-Jones برای تشخیص چهره

این پست در پاسخ یکی از خوانندگان قرار داده شده ( درخواست موضوع )

Viola - Jones الگوریتم AdaBoost رو با Cascade واسه تشخیص چهره ترکیب کردن . الگوریتم پیشنهادی شون می تونست چهره رو تو یه تصویر 384×288 با صرف زمانی معادل 0.067 ثانیه تشخیص بده. یعنی 15 بار سریع تر از آشکار ساز های state-of-the-art با دقتی بالاتر ، به طوریکه این الگوریتم یکی از پیشرفته ترین الگوریتم های ماشین بینایی در دهه ی گذشته تا به حال بوده . اما یه توضیح مختصر در مورد این که نقش AdaBoost در این الگوریتم چیه ؟ می تونه این باشه که : در ابتدا تصویر مورد نظر به زیر تصاویر ( 24×24 ) تقسیم بندی میشه. هر زیر تصویر بیانگر یه بردار ویژگی هستش. واسه این که محاسبات موثر و کارآمد باشه ، از یه سری ویژگی های خیلی ساده استفاده می کنیم . تمام مستطیل های ممکن تو زیر تصویر بررسی میشن. در هر مستطیل ، 4 نمونه ویژگی به کمک ماسک هایی که در شکل زیر اومده استخراج میشه . ( 4 ماسک ویژگی که واسه هر مستطیل استفاده میشه )

با هرکدوم از این ماسکها ، مجموع پیکسل های سطح خاکستری در نواحی سفید از مجموع پیکسل ها ی نواحی سیاه ، کم میشه. که این مقدار به عنوان یه ویژگی در نظر گرفته میشه. پس می تونیم اینطوری بگیم که تو یه زیر تصویر ( 24×24 ) بالغ بر 1 میلیون ویژگی می تونیم داشته باشیم ( البته این ویژگی ها خیلی سریع محاسبه میشن !! و می تونن کمتر از 1 میلیون ویژگی هم باشن مثلا 160000 در هر زیر تصویر )

هر ویژگی به عنوان یه یادگیرنده ی ضعیف در نظر گرفته می شه، یعنی :  

الگوریتم یادگیری پایه تلاش میکنه که بهترین کلاسیفایر ضعیف  رو که ، کوچیک ترین خطا رو در کلاسبندی داره پیدا کنه.

 مستطیل های چهره رو به عنوان مثالهای positive در نظر میگیریم. تو شکل زیر اومده:( مثالهای آموزشی مثبت)  

و مستطیل هایی که شامل تمام چهره نمیشن ، به عنوان مثالهای آموزشی Negative تلقی میشن. سپس الگوریتم AdaBoost رو اعمال میکینم ، ایشون تعدادی یادگیرنده ی ضعیف رو برمیگردونن ، که هرکدوم از اینا مربوط به یکی از 1 میلیون ویژگی هایی هست که داریم. درواقع اینجا ، AdaBoost می تونه به عنوان یه ابزار واسه انتخاب ویژگی در نظر گرفته بشه.

در ابتدا دو تا ویژگی و موقعیت مربوط به اونا در چهره انتخاب میشه . بدیهی که هر دو ویژگی بصری هستن. که اولین ویژگی اختلاف مقدار شدت روشنایی نواحی چشم و قسمتهای پایین تر از اون رو اندازه گیری میکنه و دومین ویژگی اختلاف مقدار شدت روشنایی نواحی چشمها با نواحی بین چشمها رو اندازه میگیره . با استفاده از ویژگی های انتخاب شده ، یه درخت نامتعادل ساخته میشه که بهش کلاسیفایر Cascade میگن . به شکلها دقت کنین :

پارامتر در Cascade تنظیم میشه به طوریکه ، در هر نود درخت ، ما یه انشعاب not a face داریم و معنیش اینه که تصویر ، یه تصویر چهره نبوده ، یا به عبارت دیگه ، نرخ false negative داره به حداقل میرسه. ایده ی این طرح در واقع می خواد بگه تصویر غیره چهره زودتر شناسایی میشه. به طور متوسط در هر زیر تصویر 10 تا ویژگی رو مورد بررسی قرار میدیم. اینم تعدادی آزمایش که Viola – Jones روی تصاویر انجام دادن :

البته می شه از جعبه ابزار متلب هم واسه تشخیص چهره با الگوریتم Viola - Jones استفاده کرد به این صورت


close all

clc

%Detect objects using Viola-Jones Algorithm

%To detect Face

FDetect = vision.CascadeObjectDetector;

%Read the input image

I = imread('face3.jpg');

%Returns Bounding Box values based on number of objects

BB = step(FDetect,I);

figure,

imshow(I); hold on

for i = 1:size(BB,1)

    rectangle('Position',BB(i,:),'LineWidth',5,'LineStyle','-','EdgeColor','r');

end

title('Face Detection');

hold off;

http://blogsoftware.blogfa.com/1392/07/3


روش Viola-Jones یکی از روش های بسیار موفق و سریع در تشخیص چهره بشمار می آید.
بحث در این باره بسیار زیاد است و من مختصرا بصورت فهرست وار بیان می کنم.
معمولا این روش با استفاده از Bossting کار خود را انجام می دهد در الگوریتم های بوستینگ بصورت تکراری سعی می شود نتایج بهبود یابند.
عمدتا روش ویولا-جونز با استفاده از ویژگی شبه هار (Haar Features) کار خود را انجام میدهد و در آن مقاله معروف آقای ویولا و جونز در 2001 به استفاده از یک روش سریع برای محاسبه مقدار ویژگی های شبه هار با عنوان Integral Image اشاره شده است. این مقاله تاکنون بیش از 5000 رفرنس داده شده دارد و هنوز زمینه تحقیقات پیرامون این موضوع باز است.

همچنین جهت اطلاعات بیشتر به تاپیکی که خانم ریحانه تهیه کرده اند مراجعه فرمایید.
http://artificial.ir/intelligence/thread2338.html


  • ShahBaz

نصب ماژول ها در اپن سی وی

ShahBaz | يكشنبه, ۳۱ مرداد ۱۳۹۵، ۰۷:۵۶ ب.ظ

sudo su
cd /home/elinux/opencv-3.1.0/build

cmake -DOPENCV_EXTRA_MODULES_PATH=/home/elinux/opencv_contrib-master/modules -DBUILD_opencv_legacy=OFF /home/elinux/opencv-3.1.0

  • ShahBaz

کنترل موس

ShahBaz | شنبه, ۳۰ مرداد ۱۳۹۵، ۱۰:۴۴ ق.ظ

C++ move mouse in windows using SetCursorPos

6 down vote favorite

I created a device similar to a wiimote and i want to use it as a mouse in windows (8.1). The device connects over tcp to a c++ win32 program on my windows computer and sends the position where the mouse cursor should move. I am using the SetCursorPos function to set the position, which works great to control most programs. But when I try to control for example the task manager, the cursor doesn't move anymore. When I switch from the task manager back to some other program it works again. I also tried to use the SendInput function with the same results.

This is what my code looks like with SendInput:

INPUT Input = { 0 };
Input.type = INPUT_MOUSE;

Input.mi.dx = (LONG)posX;
Input.mi.dy = (LONG)posY;

// set move cursor directly
Input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;

SendInput(1, &Input, sizeof(INPUT));

With SetCursorPos it's just one line:

SetCursorPos(posX, posY);

Can anybody tell me why it doesn't work for some programs? I know it has to be possible to do this, since I tried a smartphone app which controls the cursor and it worked in all programs.

You cannot set the cursor position or input of a window that required higher privileges than your program has..

If you want your program to be able to move the cursor over task manager, you require the same privileges as task manager: Administrator Privileges.

This is how it is done on Windows 8+.

I tried it with the following:

int main()
{
    HWND window = FindWindow("TaskManagerWindow", "Task Manager");
    if (window)
    {
        RECT rect = {0};
        GetWindowRect(window, &rect);

        SetForegroundWindow(window);
        SetActiveWindow(window);
        SetFocus(window);
        Sleep(300);
        SetCursorPos(rect.right - 200, rect.bottom - 200);
    }

    return 0;
}

Cursor only moves over task manager when ran as admin. It is the same for all context menus and windows in Windows 8+. Not just task manager.

https://msdn.microsoft.com/en-us/library/windows/desktop/ms648394(v=vs.85).aspx


http://docs.opencv.org/3.1.0/dc/d3b/classcv_1_1viz_1_1MouseEvent.html#details

اینا برای این هست که مختصات موس به برنامه ای که با اپن سی وی نوشته شده داده بشه. در صورتی که من برعکسش رو میخوام.
یعنی میخوام مختصات از برنامه به موس داده بشه. که توابعی در اپن سی وی برای این کار وجود نداره.
باید در سی ++ به دنبال کتابخونه ای که اینکار رو انجام میده بگردم.


http://randomlinux.com/around-the-web/xdotool-mouse/

این کد رو داخل ترمینال بزنی موس به مختصات 500 و 500 میره
xdotool mousemove 500 500

برای استفاده در برنامه هایی که به زبان سی ++ نوشه می شوند باید کتابخانه های

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <vector>


اینکلود شده باشند.

---------------------------------------


http://forum.ubuntu.ir/index.php/topic,138781.0.html

  • ShahBaz

تشخیص حرکت و کلیک موس در اپن سی وی

ShahBaz | جمعه, ۲۹ مرداد ۱۳۹۵، ۰۳:۵۴ ب.ظ

How to Detect Mouse Clicks and Moves

OpenCV supports for detecting mouse events. Mouse events include mouse clicks and movements over an attached OpenCV window.


OpenCV Example Code


It is very simple to do that. All you have do is to define a callback function in the OpenCV C++ code attaching to the OpenCV window. That callback function will be called every time, mouse events occur. That callback function will also give the coordinates of the mouse events. (e.g - (x, y) coordinate of a mouse click).

Here is the simple OpenCV code to detect left, right and middle mouse clicks and mouse movements with its coordinates

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace std;
using namespace cv;

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
if  ( event == EVENT_LBUTTONDOWN )
{
cout << "Left button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
}
else if  ( event == EVENT_RBUTTONDOWN )
{
cout << "Right button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
}
else if  ( event == EVENT_MBUTTONDOWN )
{
cout << "Middle button of the mouse is clicked - position (" << x << ", " << y << ")" << endl;
}
     else if ( event == EVENT_MOUSEMOVE )
     {
          cout << "Mouse move over the window - position (" << x << ", " << y << ")" << endl;

     }
}

int main(int argc, char** argv)
{
// Read image from file 
Mat img = imread("MyPic.JPG");

//if fail to read the image
if ( img.empty() ) 

cout << "Error loading the image" << endl;
return -1; 
}

//Create a window
namedWindow("My Window", 1);

//set the callback function for any mouse event
setMouseCallback("My Window", CallBackFunc, NULL);

//show the image
imshow("My Window", img);

// Wait until user press some key
waitKey(0);

return 0;

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

You can download this OpenCV visual C++ project from here

Detect Mouse Clicks and Moves Over the OpenCV Window
Detect Mouse Clicks and Moves Over the OpenCV Window


Summary

In the above OpenCV sample code,  "CallbackFunc" function will be called on any mouse event (Moving a mouse over the attached OpenCV window is also a mouse event). By using suitable if - else blocks, I printed only left, right and middle mouse clicks and mouse movements over the window.

Here are new OpenCV functions, found in the above example code. If you are not familiar with the other OpenCV functions as well, please go through the other lessons in this tutorial.


  • void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0)
This function sets a callback function to be called every time any mouse events occurs in the specified window. Here is the detailed explanation of the each parameters of the above OpenCV function.
    • winname - Name of the OpenCV window. All mouse events related to this window will be registered
    • onMouse - Name of the callback function. Whenever mouse events related to the above window occur, this callback function will be called. This function should have the signature like the following
      • void FunctionName(int event, int x, int y, int flags, void* userdata)
        • event - Type of the mouse event. These are the entire list of mouse events
          • EVENT_MOUSEMOVE
          • EVENT_LBUTTONDOWN
          • EVENT_RBUTTONDOWN
          • EVENT_MBUTTONDOWN
          • EVENT_LBUTTONUP
          • EVENT_RBUTTONUP
          • EVENT_MBUTTONUP
          • EVENT_LBUTTONDBLCLK
          • EVENT_RBUTTONDBLCLK
          • EVENT_MBUTTONDBLCLK
        • x - x coordinate of the mouse event
        • y - y coordinate of the mouse event
        • flags - Specific condition whenever a mouse event occurs. See the next OpenCV example code for the usage of this parameter. Here is the entire list of enum values which will be possesed by "flags"
          • EVENT_FLAG_LBUTTON
          • EVENT_FLAG_RBUTTON
          • EVENT_FLAG_MBUTTON
          • EVENT_FLAG_CTRLKEY
          • EVENT_FLAG_SHIFTKEY
          • EVENT_FLAG_ALTKEY
        • userdata - Any pointer passes to the "setMouseCallback" function as the 3rd parameter (see below)
    • userdata - This pointer will be passed to the callback function

OpenCV Example to Detect Mouse Clicks While Pressing a Key

I am going to explain you how to detect a mouse event while pressing a key of the keyboard. 
The following OpenCV example code will detect left mouse clicks while pressing the "CTRL" key , right mouse clicks while pressing the "SHIFT" key and movements of the mouse over the OpenCV window while pressing the "ALT" key.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace std;
using namespace cv;

void CallBackFunc(int event, int x, int y, int flags, void* userdata)
{
if ( flags == (EVENT_FLAG_CTRLKEY + EVENT_FLAG_LBUTTON) )
{
cout << "Left mouse button is clicked while pressing CTRL key - position (" << x << ", " << y << ")" << endl;
}
else if ( flags == (EVENT_FLAG_RBUTTON + EVENT_FLAG_SHIFTKEY) )
{
cout << "Right mouse button is clicked while pressing SHIFT key - position (" << x << ", " << y << ")" << endl;
}
else if ( event == EVENT_MOUSEMOVE && flags == EVENT_FLAG_ALTKEY)
{
cout << "Mouse is moved over the window while pressing ALT key - position (" << x << ", " << y << ")" << endl;
}
}

int main(int argc, char** argv)
{
// Read image from file 
Mat img = imread("MyPic.JPG");

//if fail to read the image
if ( img.empty() ) 

cout << "Error loading the image" << endl;
return -1; 
}

//Create a window
namedWindow("My Window", 1);

//set the callback function for any mouse event
setMouseCallback("My Window", CallBackFunc, NULL);

//show the image
imshow("My Window", img);

// Wait until user press some key
waitKey(0);

  return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

You can download this visual C++ OpenCV project from here.

No new OpenCV functions in the above example. If you have some doubt about any OpenCV functions in the above example, please refer to previous lessons.


Next Tutorial : Rotate Image & Video

Previous Tutorial : How to Add Trackbar

  

  • ShahBaz

افزایش کنتراست تصویر

ShahBaz | دوشنبه, ۲۵ مرداد ۱۳۹۵، ۰۴:۳۰ ب.ظ
  • void convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 )
This OpenCV function converts  image into another format with scaling. Scaling is done according to the following formula.
                                              m[i,j] = alfa * img[i,j] + beta
Here is the parameters of this function
    • OutputArray m - Store the converted image
    • int rtype - Depth of the output image. If the value of rtype is negative, output type is same as the input image. I have used a negative value in the above program because I don't want to change the depth of the original image. Possible inputs to this parameter
      • CV_8U
      • CV_32S
      • CV_64F
      • -1
Complete list of depths can be found in Basics of OpenCV API
    • double alpha - Multiplication factor; Every pixel will be multiplied by this value
    • double beta - This value will be added to very pixels after multiplying with the above value.
Here is the formula again. Here m[i, j] means a pixel at ith row and jth column.
                              m[i,j] = alfa * img[i,j] + beta

Change the Contrast of a Video

It is similar to the above program except that you have to change the contrast for each and every frame of the video. Here is the example OpenCV program.
 
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char* argv[])
{
    VideoCapture cap("C:/Users/SHERMAL/Desktop/SampleVideo.wmv"); // open the video file for reading
 
    if ( !cap.isOpened() )  // if not success, exit program
    {
         cout << "Cannot open the video file" << endl;
         return -1;
    }
 
    //create windows
    namedWindow("Original Video",CV_WINDOW_AUTOSIZE); 
    namedWindow("Contrast Increased",CV_WINDOW_AUTOSIZE); 
    namedWindow("Contrast Decreased",CV_WINDOW_AUTOSIZE); 
 
    while (1)
    {
        Mat frame;
 
        bool bSuccess = cap.read(frame); // read a new frame from video
 
         if (!bSuccess) //if not success, break loop
        {
cout << "Cannot read the frame from video file" << endl;
break;
        }
 
Mat imgH;
frame.convertTo(imgH, -1, 2, 0); //increase the contrast (double)
 
Mat imgL;
frame.convertTo(imgL, -1, 0.5, 0); //decrease the contrast (halve)
 
//show the image
        imshow("Original Video", frame); 
imshow("Contrast Increased", imgH); 
imshow("Contrast Decreased", imgL); 
 
       if (waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop
        {
                cout << "esc key is pressed by user" << endl; 
                break
        }
    }
    return 0;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
You can download this OpenCV visual c++ project from here. (The downloaded file is a compressed .rar folder. So, you have to extract it using Winrar or other suitable software)
 
All the OpenCV methods in the above example program have been discussed in previous lessons. So, I am not going to repeat them again.
 
  • ShahBaz

namedWindow + opencv

ShahBaz | دوشنبه, ۲۵ مرداد ۱۳۹۵، ۰۹:۳۳ ق.ظ

namedWindow

Creates a window.

C++: void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE )
Python: cv2.namedWindow(winname[, flags]) → None
C: int cvNamedWindow(const char* name, int flags=CV_WINDOW_AUTOSIZE )
Python: cv.NamedWindow(name, flags=CV_WINDOW_AUTOSIZE) → None
Parameters:
  • name – Name of the window in the window caption that may be used as a window identifier.
  • flags

    Flags of the window. The supported flags are:

    • WINDOW_NORMAL If this is set, the user can resize the window (no constraint).
    • WINDOW_AUTOSIZE If this is set, the window size is automatically adjusted to fit the displayed image (see imshow() ), and you cannot change the window size manually.
    • WINDOW_OPENGL If this is set, the window will be created with OpenGL support.

The function namedWindow creates a window that can be used as a placeholder for images and trackbars. Created windows are referred to by their names.

If a window with the same name already exists, the function does nothing.

You can call destroyWindow() or destroyAllWindows() to close the window and de-allocate any associated memory usage. For a simple program, you do not really have to call these functions because all the resources and windows of the application are closed automatically by the operating system upon exit.

Note

Qt backend supports additional flags:

  • CV_WINDOW_NORMAL or CV_WINDOW_AUTOSIZE: CV_WINDOW_NORMAL enables you to resize the window, whereas CV_WINDOW_AUTOSIZE adjusts automatically the window size to fit the displayed image (see imshow() ), and you cannot change the window size manually.
  • CV_WINDOW_FREERATIO or CV_WINDOW_KEEPRATIO: CV_WINDOW_FREERATIO adjusts the image with no respect to its ratio, whereas CV_WINDOW_KEEPRATIO keeps the image ratio.
  • CV_GUI_NORMAL or CV_GUI_EXPANDED: CV_GUI_NORMAL is the old way to draw the window without statusbar and toolbar, whereas CV_GUI_EXPANDED is a new enhanced GUI.

By default, flags == CV_WINDOW_AUTOSIZE | CV_WINDOW_KEEPRATIO | CV_GUI_EXPANDED

  • ShahBaz