help: image coordinates(x,y) in opencv with mfc
-
hi i have developed program using opencv with mfc and i can't get the coordinates (x,y) of image in the static box using mouse click. image opens in separate window. the code is as:
void on_mouse( int evt, int x, int y, int flags, void* param )
{
if (evt = CV_EVENT_LBUTTONDBLCLK)
{
CString Blue, Green;
Blue.Format(_T("%d"), x);
Green.Format(_T("%d"), y);
SetDlgItemText(m_hWnd, IDC_Blue, Blue);
SetDlgItemText(m_hWnd, IDC_Green, Green);
}}
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle). the mouse callback function is defined in a thread as
cvSetMouseCallback("box.png", on_mouse, 0);
any idea what is wrong with this code. Regards Jawad
You are not specifying exactly what the problem is, but I am going to guess that you look at the x and y values and determine that they are incorrect. If that is the case, try calling ScreenToClient()[^] to convert the screen coordinates to client coordinates of your dialog. You have to pass in the m_hWnd of you dialog as the first parameter. Soren Madsen
-
hi i have developed program using opencv with mfc and i can't get the coordinates (x,y) of image in the static box using mouse click. image opens in separate window. the code is as:
void on_mouse( int evt, int x, int y, int flags, void* param )
{
if (evt = CV_EVENT_LBUTTONDBLCLK)
{
CString Blue, Green;
Blue.Format(_T("%d"), x);
Green.Format(_T("%d"), y);
SetDlgItemText(m_hWnd, IDC_Blue, Blue);
SetDlgItemText(m_hWnd, IDC_Green, Green);
}}
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle). the mouse callback function is defined in a thread as
cvSetMouseCallback("box.png", on_mouse, 0);
any idea what is wrong with this code. Regards Jawad
You are not specifying exactly what the problem is, but I am going to guess that you look at the x and y values and determine that they are incorrect. If that is the case, try calling ScreenToClient()[^] to convert the screen coordinates to client coordinates of your dialog. You have to pass in the m_hWnd of you dialog as the first parameter. Soren Madsen
-
You are not specifying exactly what the problem is, but I am going to guess that you look at the x and y values and determine that they are incorrect. If that is the case, try calling ScreenToClient()[^] to convert the screen coordinates to client coordinates of your dialog. You have to pass in the m_hWnd of you dialog as the first parameter. Soren Madsen
sorry for not well explained actually the problem is that static box does not show any value when mouse is being clicked. means it remains unchanged as it was. Jawad
-
sorry for not well explained actually the problem is that static box does not show any value when mouse is being clicked. means it remains unchanged as it was. Jawad
Oh, I see what you mean now. You have a bug right there in your code. I am not sure if you get all mouse events in this handler (including mouse move events), but you should fix it and see if that solves your problem. Change
if (evt = CV_EVENT_LBUTTONDBLCLK)
to
if (evt == CV_EVENT_LBUTTONDBLCLK)
Soren Madsen
-
sorry for not well explained actually the problem is that static box does not show any value when mouse is being clicked. means it remains unchanged as it was. Jawad
-
Oh, I see what you mean now. You have a bug right there in your code. I am not sure if you get all mouse events in this handler (including mouse move events), but you should fix it and see if that solves your problem. Change
if (evt = CV_EVENT_LBUTTONDBLCLK)
to
if (evt == CV_EVENT_LBUTTONDBLCLK)
Soren Madsen
SoMad wrote:
...but you should fix it and see if that solves your problem.
True it should be fixed, but it won't make a difference as the expression
(evt = CV_EVENT_LBUTTONDBLCLK)
always evaluates to true."One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
-
hi i have developed program using opencv with mfc and i can't get the coordinates (x,y) of image in the static box using mouse click. image opens in separate window. the code is as:
void on_mouse( int evt, int x, int y, int flags, void* param )
{
if (evt = CV_EVENT_LBUTTONDBLCLK)
{
CString Blue, Green;
Blue.Format(_T("%d"), x);
Green.Format(_T("%d"), y);
SetDlgItemText(m_hWnd, IDC_Blue, Blue);
SetDlgItemText(m_hWnd, IDC_Green, Green);
}}
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle). the mouse callback function is defined in a thread as
cvSetMouseCallback("box.png", on_mouse, 0);
any idea what is wrong with this code. Regards Jawad
jawadali477 wrote:
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle).
When do you define it? It has to be defined from the window handle AFTER it has been created (when using MFC, it means it should come after your window's OnInitDialog() has been called), otherwise it could be undefined. FYI... your coding style seems more C-like than C++. Is your function global? Did you declare HWND m_hWnd a global variable? I hope you didn't do that because all MFC window based objects have a variable name m_hWnd.
-
SoMad wrote:
...but you should fix it and see if that solves your problem.
True it should be fixed, but it won't make a difference as the expression
(evt = CV_EVENT_LBUTTONDBLCLK)
always evaluates to true."One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
Yes, I had originally written that in my message, but took it out. At the time I was thinking there might be more code in this function that he had not included - like this could have been an "else if" with an "if" above it having a similar error. Otherwise this code would be called all the time since the handler processes all mouse events including mouse move. I think the problem has to do with the window handle and I don't really like this call from a separate thread. Soren Madsen
-
hi i have developed program using opencv with mfc and i can't get the coordinates (x,y) of image in the static box using mouse click. image opens in separate window. the code is as:
void on_mouse( int evt, int x, int y, int flags, void* param )
{
if (evt = CV_EVENT_LBUTTONDBLCLK)
{
CString Blue, Green;
Blue.Format(_T("%d"), x);
Green.Format(_T("%d"), y);
SetDlgItemText(m_hWnd, IDC_Blue, Blue);
SetDlgItemText(m_hWnd, IDC_Green, Green);
}}
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle). the mouse callback function is defined in a thread as
cvSetMouseCallback("box.png", on_mouse, 0);
any idea what is wrong with this code. Regards Jawad
hi, below is the complete code that i have developed. it builds fine and after debugging it shows two different windows, one containing image and other containing static boxes. but when i double click on the image window (which is my mouse event), values of (x,y) coordinates are not displayed in the static boxes (static boxes are in the separate window). please pardon my mistakes.
#include "stdafx.h"
#include "opencv01.h"
#include "opencv01Dlg.h"
#include "highgui.h"
#include "afxwin.h"
#include "cv.h"
#include "math.h"
#include#ifdef _DEBUG
#define new DEBUG_NEW
#endifvoid on_mouse( int evt, int x, int y, int flags, void* param ); //defining mouse event
HWND hwnd; //defining handleclass CAboutDlg : public CDialog
{
public:
CAboutDlg();enum { IDD = IDD\_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange\* pDX); // DDX/DDV support
protected:
DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()Copencv01Dlg::Copencv01Dlg(CWnd* pParent /*=NULL*/)
: CDialog(Copencv01Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void Copencv01Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(Copencv01Dlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()// Copencv01Dlg message handlers
BOOL Copencv01Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);CMenu\* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS\_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF\_SEPARATOR); pSysMenu->AppendMenu(MF\_STRING, IDM\_ABOUTBOX, strAboutMenu); } } SetIcon(m\_hIcon, TRUE); // Set big icon SetIcon(m\_hIcon, FALSE); // Set small icon AfxBeginThread(MyThreadProc, this); //calling thread return TRUE; // return TRUE unless you set the focus to a control
}
UINT Copencv01Dlg::MyThreadProc(LPVOID pParam)
{
Copencv01Dlg * me = (Copencv01Dlg *)pParam;
me->MyThreadProc();
return TRUE;
}void Copencv01Dlg::MyThreadProc()
{
//image initializationIplImage\* img = cvLoadImage("box.png", CV\_WINDOW\_AUTOSIZE);
-
jawadali477 wrote:
the handle
HWND m_hWnd;
is defined at beginning where the header files are included (i might be doing it wrong since i'm not good at programming with handle).
When do you define it? It has to be defined from the window handle AFTER it has been created (when using MFC, it means it should come after your window's OnInitDialog() has been called), otherwise it could be undefined. FYI... your coding style seems more C-like than C++. Is your function global? Did you declare HWND m_hWnd a global variable? I hope you didn't do that because all MFC window based objects have a variable name m_hWnd.
hi, i'm still stuck with the dialog handle. i have posted the complete code. please i need help. Regards Jawad
-
I just thought about something. You mention that the m_hWnd handle is defined, but do you actually assign it to the m_hWnd of your dialog object? Soren Madsen
hi, i'm still stuck with the dialog handle. i have posted the complete code. please i need help. Regards Jawad