um make template matching soft wear using code now i want get x y cordinate in to the arduino board using serial communication. but its not success. this is my code.my arduino board connect with pc via com10(i see it in the devise manager) . that port not open by another softwaer. but always print this msg after begin debug. "error Port opened!" image here
https://docs.google.com/document/d/1taoPE3bb4i1D-B8xG2LgT6Liy2csnWO2jxGn7E5zLf4/edit?usp=sharing[
^]
pls help me
#include <iostream>
#include "opencv2/opencv.hpp"
#include
#include
#include
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <sstream>
using namespace cv;
using namespace std;
Point point1, point2;
int drag = 0;
Rect rect;
Mat img, roiImg;
int select_flag = 0;
bool go_fast = false;
Mat mytemplate;
void track(cv::Mat &img, const cv::Mat &templ, const cv::Rect &r )
{
static int n = 0;
if (select_flag)
{
templ.copyTo(mytemplate);
select_flag = false;
go_fast = true;
}
cv::Mat result;
matchTemplate( img, mytemplate, result, CV_TM_SQDIFF_NORMED );
normalize( result, result, 0, 1, NORM_MINMAX, -1, Mat() );
double minVal; double maxVal; Point minLoc; Point maxLoc;
Point matchLoc;
minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
matchLoc = minLoc;
rectangle( img, matchLoc, Point( matchLoc.x + mytemplate.cols , matchLoc.y + mytemplate.rows ), CV_RGB(255, 0, 255), 3 );
std::cout << matchLoc << "\n";
}
void mouseHandler(int event, int x, int y, int flags, void *param)
{
if (event == CV_EVENT_LBUTTONDOWN && !drag)
{
point1 = Point(x, y);
drag = 1;
}
if (event == CV_EVENT_MOUSEMOVE && drag)
{
Mat img1 = img.clone();
point2 = Point(x, y);
rectangle(img1, point1, point2, CV_RGB(255, 0, 0), 3, 8, 0);
imshow("image", img1);
}
if (event == CV_EVENT_LBUTTONUP && drag)
{
point2 = Point(x, y);
rect = Rect(point1.x, point1.y, x - point1.x, y - point1.y);
drag = 0;
roiImg = img(rect);
}
if (event == CV_EVENT_LBUTTONUP)
{
select_flag = 1;
drag = 0;
}
}
int main()
{
char test[] = "Hello";
HANDLE hDevice = CreateFile(L"COM10",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
if (hDevice !=INVALID_HANDLE_VALUE)
{
printf("Port opened! \n");
DCB lpTest;
GetCommState(hDevice,&lpTest);
lpTest.BaudRate = CBR_9600;
lpTest.ByteSize = 8;
lpTest.Parity = NOPARITY;
lpTest.StopBits = ONESTOPBIT;
SetCommState(hDevice,&lpTest);
DWORD btsIO;
WriteFile(hDevice,test,strlen(test),&btsIO,NULL);
CloseHandle(hDevice);
}
else{
printf("error Port opened! \n");
}
int k;
VideoCapture cap(0);
if (!cap.isOpened())
return 1;
if (!cap.isOpened())
{
printf("Unable to open video file\n");
return -1;
}
cap >> img;
imshow("image", img);
while (1)
{
cap >> img;
if (img.empty())
break;
if (rect.width == 0 && rect.height == 0)
cvSetMouseCallback("image", mouseHandler, NULL);
else
track(img, roiImg, rect);
if (select_flag == 1)
imshow("Template", roiImg);
imshow("image", img);
k = waitKey(go_fast ? 30 : 10000);
if (k == 27)
break;
}
CloseHandle(hDevice);
return 0;
}