박민혀기
CELLON I UI 1.3v(수정중) 2023_04_01 본문
네거티브 기능 추가(버튼) -> 모니터 해상도(1080p 확인) -> ROI, 결과, 해상도, Acq 값 파일 저장 및 불러오기
-> ROI 최적 크기 비교(자료화) -> 안정성(Aging~)
ROI_flag => OK
NP_flag => OK
ROI_Point => OK
Total => OK
Good => OK
Bad => OK
ROI Image => OK
Accuracy => OK
resol => OK
#include <unistd.h>
#include <iostream>
#include <time.h>
#include "opencv2/opencv.hpp"
#include <wiringPi.h>
#include <math.h>
#define WEB_CAM 0
#define INPUT_PORT 22 //INPUT5
#define INPUT_DATA_RESET 27 //INPUT4
using namespace std;
using namespace cv;
unsigned int Accuracy_Percent[7];
unsigned int Accuracy_Percent_Temp[7];
int flag = 0;
bool Setting_Mode_Flag = false;
unsigned int Compare_Total, Compare_Good, Compare_Bad;
bool ROI_flag[7] = { 0, 0, 0, 0, 0, 0, 0 };
bool Set_Flag = false;
int Set_Click = -1;
VideoCapture cap;
Mat frame, Show_Frame, Inspect_ROI;
Mat Set_Frame, Set_Frame_Clone;
vector<Mat> Standard_ROI, Standard_ROI_Temp;
Point temp, temp2;
int Inspect_ROI_Point[28], Inspect_ROI_Point_Temp_List[28];
vector<Point> State_Message_Point;
vector<String> State_Message_S;
Point ROI_Sel_Pt = Point(5, 86);
vector<Scalar> List_Scalar;
Point Title_Point = Point(5, 70);
Point Rectangle_Point_x = Point(135, 60);
Point Rectangle_Point_y = Point(165, 60);
Point Resolution_Pt = Point(100, 60);
Point Set_Button_Pt = Point(230, 60);
Size Resolution_Size = Size(40, 15);
Size Rectangle_Size = Size(20, 15);
Point Reset_Button_Point = Point(135, 230);
Size Reset_Button_Size = Point(55, 23);
int button_dis = 30;
double Message_Font_Size = 0.4;
Point Resolution_Point = Point(90, 200);
unsigned int width, height;
int State_Message_Flag = 0;
char img_data_addr[40] = "/home/cellon/CELLON/";
char data_addr[40] = "/home/cellon/CELLON/Log_data.txt";
char Fput_STR[100];
char total_data_addr[40] = "/home/cellon/CELLON/total_data.txt";
char good_data_addr[40] = "/home/cellon/CELLON/good_data.txt";
char bad_data_addr[40] = "/home/cellon/CELLON/bad_data.txt";
const int Led[] = { 18, 23, 24 }; //Led[0] = Ready, Led[1] = Bad, Led[2] = Good
bool start_signal = false;
///////////////////////Count Segment/////////////////////////
void State_Message() {
if (State_Message_S[6] != State_Message_S[7]) {
State_Message_S[0] = State_Message_S[1];
State_Message_S[1] = State_Message_S[2];
State_Message_S[2] = State_Message_S[3];
State_Message_S[3] = State_Message_S[4];
State_Message_S[4] = State_Message_S[5];
State_Message_S[5] = State_Message_S[6];
State_Message_S[6] = State_Message_S[7];
}
for (int i = 6; i >= 0; i--) {
putText(Show_Frame, State_Message_S[i], State_Message_Point[i], FONT_HERSHEY_SIMPLEX, Message_Font_Size, Scalar(0, 0, 0), 2);
putText(Show_Frame, State_Message_S[i], State_Message_Point[i], FONT_HERSHEY_SIMPLEX, Message_Font_Size, Scalar(220, 220, 220), 1);
}
}
void Compare_State(Scalar state_scalar) {
rectangle(Show_Frame, Rect(width - 135, height - 30, 95, 25), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(width - 130, height - 25, 85, 15), state_scalar, -1);
}
void Compare_Result() {
char Compare_Total_S[15], Compare_Good_S[15], Compare_Bad_S[15];
sprintf(Compare_Total_S, "TOTAL : %d", Compare_Total);
sprintf(Compare_Good_S, "GOOD : %d", Compare_Good);
sprintf(Compare_Bad_S, "BAD : %d", Compare_Bad);
putText(Show_Frame, Compare_Total_S, Point(width - 135, height - 70), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Compare_Total_S, Point(width - 135, height - 70), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1);
putText(Show_Frame, Compare_Good_S, Point(width - 135, height - 55), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Compare_Good_S, Point(width - 135, height - 55), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1);
putText(Show_Frame, Compare_Bad_S, Point(width - 135, height - 40), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Compare_Bad_S, Point(width - 135, height - 40), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1);
}
void ALAM_Marking() {
Point ALAM_Location = Point(8, 25);
putText(Show_Frame, "=", ALAM_Location, FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 0, 0), 5);
putText(Show_Frame, "CELLON", ALAM_Location + Point(30, -2), FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 0, 0), 4);
putText(Show_Frame, "=", ALAM_Location, FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 127, 255), 2);
putText(Show_Frame, "CELLON", ALAM_Location + Point(30, -2), FONT_HERSHEY_SIMPLEX, 0.6, Scalar(0, 127, 255), 1);
}
void Center_Marking(double width, double height) {
line(Show_Frame, Point(width / 2, height / 2 + 15), Point(width / 2, height / 2 - 15), Scalar(0, 0, 255), 1);
line(Show_Frame, Point(width / 2 + 15, height / 2), Point(width / 2 - 15, height / 2), Scalar(0, 0, 255), 1);
}
void Setting_Mode() {
char Accuracy_Percent_S[4];
Point Value_Point = Point(109, 70);
/*/////////////////// Menu Box /////////////////////*/
rectangle(Show_Frame, Rect(Title_Point - Point(2, 30) - Point(3, 3), Title_Point + Point(280, button_dis * 9) + Point(3, 3)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Title_Point - Point(2, 30), Title_Point + Point(280, button_dis * 9)), Scalar(125, 125, 125), -1);
/*/////////////////// ROI_? Text, Button /////////////////////*/
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt, Reset_Button_Size + Size(-8, -4)), List_Scalar[0], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis), Reset_Button_Size + Size(-8, -4)), List_Scalar[1], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 2 + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 2, Reset_Button_Size + Size(-8, -4)), List_Scalar[2], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 3 + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 3, Reset_Button_Size + Size(-8, -4)), List_Scalar[3], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 4 + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 4, Reset_Button_Size + Size(-8, -4)), List_Scalar[4], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 5 + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 5, Reset_Button_Size + Size(-8, -4)), List_Scalar[5], -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 6 + Point(-3, -3), Reset_Button_Size + Size(-8, -4) + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(ROI_Sel_Pt + Point(0, button_dis) * 6, Reset_Button_Size + Size(-8, -4)), List_Scalar[6], -1);
putText(Show_Frame, "Resolution", Title_Point, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "Resolution", Title_Point, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_1", Title_Point + Point(0, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_1", Title_Point + Point(0, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_2", Title_Point + Point(0, button_dis) * 2, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_2", Title_Point + Point(0, button_dis) * 2, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_3", Title_Point + Point(0, button_dis) * 3, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_3", Title_Point + Point(0, button_dis) * 3, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_4", Title_Point + Point(0, button_dis) * 4, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_4", Title_Point + Point(0, button_dis) * 4, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_5", Title_Point + Point(0, button_dis) * 5, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_5", Title_Point + Point(0, button_dis) * 5, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_6", Title_Point + Point(0, button_dis) * 6, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_6", Title_Point + Point(0, button_dis) * 6, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ROI_7", Title_Point + Point(0, button_dis) * 7, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ROI_7", Title_Point + Point(0, button_dis) * 7, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
/*//////////////////// Resolution Button ////////////////////*/
int mar = Resolution_Size.width;
rectangle(Show_Frame, Rect(Resolution_Pt + Point(-3, -3), Resolution_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Resolution_Pt, Resolution_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Resolution_Pt + Point(-3, -3) + Point(mar + 10, 0), Resolution_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Resolution_Pt + Point(mar + 10, 0), Resolution_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Resolution_Pt + Point(-3, -3) + Point(mar * 2 + 20, 0), Resolution_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Resolution_Pt + Point(mar * 2 + 20, 0), Resolution_Size), Scalar(170, 170, 170), -1);
//Button Text
putText(Show_Frame, "480", Resolution_Pt + Point(3, 12) + Point(4, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "480", Resolution_Pt + Point(3, 12) + Point(4, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "640", Resolution_Pt + Point(3, 12) + Point(mar + 15, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "640", Resolution_Pt + Point(3, 12) + Point(mar + 15, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "1280", Resolution_Pt + Point(3, 12) + Point(mar * 2 + 20, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "1280", Resolution_Pt + Point(3, 12) + Point(mar * 2 + 20, -1), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
/*//////////////////// +, - Button ////////////////////*/
// - //
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis), Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 2 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 2, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 3 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 3, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 4 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 4, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 5 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 5, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 6 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 6, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 7 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_x + Point(0, button_dis) * 7, Rectangle_Size), Scalar(170, 170, 170), -1);
// + //
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis), Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 2 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 2, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 3 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 3, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 4 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 4, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 5 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 5, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 6 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 6, Rectangle_Size), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 7 + Point(-3, -3), Rectangle_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Rectangle_Point_y + Point(0, button_dis) * 7, Rectangle_Size), Scalar(170, 170, 170), -1);
/*//////////////////// +, - Button Text ////////////////////*/
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 2 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 3 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 4 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 5 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 6 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "-", Rectangle_Point_x + Point(0, button_dis) * 7 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 2 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 3 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 4 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 5 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 6 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
putText(Show_Frame, "+", Rectangle_Point_y + Point(0, button_dis) * 7 + Point(3, 12), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
/*/////////////////// SET BUTTON Rect, Text ////////////////////*/
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 2) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 2), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 3) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 3), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 4) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 4), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 5) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 5), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 6) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 6), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 7) - Point(3, 3), Rectangle_Size + Size(26, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Set_Button_Pt + Point(0, button_dis * 7), Rectangle_Size + Size(20, 0)), Scalar(170, 170, 170), -1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 2 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 2 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 3 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 3 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 4 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 4 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 5 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 5 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 6 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 6 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 7 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "SET", Set_Button_Pt + Point(8, button_dis * 7 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
//-> Print
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 2 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 2 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 3 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 3 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 4 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 4 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 5 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 5 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 6 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 6 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 7 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(0, 0, 0), 3);
putText(Show_Frame, "->", Set_Button_Pt + Point(-30, button_dis * 7 + 11), FONT_HERSHEY_SIMPLEX, 0.4, Scalar(255, 255, 255), 1);
//OK Button
rectangle(Show_Frame, Rect(Title_Point + Point(206, button_dis * 8) + Point(-3, -3), Reset_Button_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Title_Point + Point(206, button_dis * 8), Reset_Button_Size), Scalar(170, 170, 170), -1);
putText(Show_Frame, "OK", Title_Point + Point(220, button_dis * 8 + 14), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
//Cancel Button
rectangle(Show_Frame, Rect(Title_Point + Point(136, button_dis * 8) + Point(-3, -3), Reset_Button_Size + Size(6, 6)), Scalar(0, 0, 0), -1);
rectangle(Show_Frame, Rect(Title_Point + Point(136, button_dis * 8), Reset_Button_Size), Scalar(170, 170, 170), -1);
putText(Show_Frame, "Cancel", Title_Point + Point(137, button_dis * 8 + 14), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 1);
//ACQ Text
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 3), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 3), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 4), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 4), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 5), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 5), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 6), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 6), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 7), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, "ACQ :", Value_Point + Point(-50, button_dis * 7), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
//ACQ Value Text
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[0]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[1]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 2, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 2, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[2]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 3, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 3, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[3]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 4, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 4, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[4]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 5, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 5, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[5]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 6, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 6, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
sprintf(Accuracy_Percent_S, "%d", Accuracy_Percent[6]);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 7, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 3);
putText(Show_Frame, Accuracy_Percent_S, Value_Point + Point(0, button_dis) * 7, FONT_HERSHEY_SIMPLEX, 0.5, Scalar(255, 255, 255), 1);
}
void Wait_for_Cap(int ch_width) {
double Wait_Font_Size;
Point text_pt;
if (width == 1280) {
Wait_Font_Size = 1.5;
text_pt = Point(width / 6, height / 3 * 2);
}
else {
Wait_Font_Size = 0.8;
text_pt = Point(640 / 6, 480 / 3 * 2);
}
putText(Show_Frame, "Wait for Changing Resolution...", text_pt, FONT_HERSHEY_SIMPLEX, Wait_Font_Size, Scalar(0, 0, 0), 3);
putText(Show_Frame, "Wait for Changing Resolution...", text_pt, FONT_HERSHEY_SIMPLEX, Wait_Font_Size, Scalar(255, 255, 255), 1);
imshow("Show_Frame", Show_Frame);
waitKey(1);
}
void Resolution_Event(int ch_width, int ch_height, char Message[]) {
Wait_for_Cap(ch_width);
cap.release();
cap = VideoCapture(WEB_CAM);
cap.set(3, ch_width);
cap.set(4, ch_height);
width = ch_width;
height = ch_height;
State_Message_Point.clear();
State_Message_Point.push_back(Point(15, height - 125));
State_Message_Point.push_back(Point(15, height - 110));
State_Message_Point.push_back(Point(15, height - 95));
State_Message_Point.push_back(Point(15, height - 80));
State_Message_Point.push_back(Point(15, height - 65));
State_Message_Point.push_back(Point(15, height - 50));
State_Message_Point.push_back(Point(15, height - 35));
State_Message_Point.push_back(Point(15, height - 20));
State_Message_S[7] = Message;
}
void ROI_Click(int Rflag) {
ROI_flag[Rflag] = !ROI_flag[Rflag];
List_Scalar.clear();
for (int i = 0; i < 7; i++) {
if (ROI_flag[i] == 0)
List_Scalar.push_back(Scalar(0, 0, 255, 0));
else
List_Scalar.push_back(Scalar(50, 255, 50, 0));
}
}
void Plu_Min_Button_Event(bool sign, int Acc_flag) {
if (sign == 1) Accuracy_Percent[Acc_flag]++;
else Accuracy_Percent[Acc_flag]--;
}
void Set_ROI_Mode() {
cap >> Set_Frame;
flip(Set_Frame, Set_Frame, 1);
Set_Frame_Clone = Set_Frame.clone();
imshow("Show_Frame", Set_Frame);
}
void Mouse_Event(int event, int x, int y, int flags, void* userdata) {
if (Setting_Mode_Flag == true && event == EVENT_LBUTTONDOWN && Set_Flag != true) {
int mar = Resolution_Pt.x + Resolution_Size.width + 10;
Size Min_Plus_Button_Size = Reset_Button_Size + Size(-8, -4);
if (((Resolution_Pt.x <= x) && (Resolution_Pt.x + Resolution_Size.width >= x)) &&
((Resolution_Pt.y <= y) && (Resolution_Pt.y + Resolution_Size.height >= y))) { //320x240
// Resolution_Event(320, 240, "Res : 320x240");
}
else if (((mar <= x) && (mar + Resolution_Size.width >= x)) &&
((Resolution_Pt.y <= y) && (Resolution_Pt.y + Resolution_Size.height >= y))) { //640x480
char mes[20] = "Res : 640x480";
Resolution_Event(640, 480, mes);
}
else if (((mar + Resolution_Size.width + 10 <= x) && (mar + Resolution_Size.width * 2 + 10 >= x)) &&
((Resolution_Pt.y <= y) && (Resolution_Pt.y + Resolution_Size.height >= y))) { //1280x720
char mes[20] = "Res : 1280x720";
Resolution_Event(1280, 720, mes);
}
else if ((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x) &&
((ROI_Sel_Pt.y <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height >= y))) { //ROI_1 Button
ROI_Click(0);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis >= y))) { //ROI_2 Button
ROI_Click(1);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis * 2 <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis * 2 >= y))) { //ROI_3 Button
ROI_Click(2);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis * 3 <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis * 3 >= y))) { //ROI_4 Button
ROI_Click(3);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis * 4 <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis * 4 >= y))) { //ROI_5 Button
ROI_Click(4);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis * 5 <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis * 5 >= y))) { //ROI_6 Button
ROI_Click(5);
}
else if (((ROI_Sel_Pt.x <= x) && (ROI_Sel_Pt.x + Min_Plus_Button_Size.width >= x)) &&
((ROI_Sel_Pt.y + button_dis * 6 <= y) && (ROI_Sel_Pt.y + Min_Plus_Button_Size.height + button_dis * 6 >= y))) { //ROI_7 Button
ROI_Click(6);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 1
((Rectangle_Point_x.y + button_dis <= y) && (Rectangle_Point_x.y + button_dis + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 0);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 2
((Rectangle_Point_x.y + button_dis * 2 <= y) && (Rectangle_Point_x.y + button_dis * 2 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 1);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 3
((Rectangle_Point_x.y + button_dis * 3 <= y) && (Rectangle_Point_x.y + button_dis * 3 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 2);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 4
((Rectangle_Point_x.y + button_dis * 4 <= y) && (Rectangle_Point_x.y + button_dis * 4 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 3);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 5
((Rectangle_Point_x.y + button_dis * 5 <= y) && (Rectangle_Point_x.y + button_dis * 5 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 4);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 6
((Rectangle_Point_x.y + button_dis * 6 <= y) && (Rectangle_Point_x.y + button_dis * 6 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 5);
}
else if (((Rectangle_Point_x.x <= x) && (Rectangle_Point_x.x + Rectangle_Size.width >= x)) && //- 7
((Rectangle_Point_x.y + button_dis * 7 <= y) && (Rectangle_Point_x.y + button_dis * 7 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(0, 6);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 1
((Rectangle_Point_y.y + button_dis <= y) && (Rectangle_Point_y.y + button_dis + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 0);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 2
((Rectangle_Point_y.y + button_dis * 2 <= y) && (Rectangle_Point_y.y + button_dis * 2 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 1);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 3
((Rectangle_Point_y.y + button_dis * 3 <= y) && (Rectangle_Point_y.y + button_dis * 3 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 2);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 4
((Rectangle_Point_y.y + button_dis * 4 <= y) && (Rectangle_Point_y.y + button_dis * 4 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 3);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 5
((Rectangle_Point_y.y + button_dis * 5 <= y) && (Rectangle_Point_y.y + button_dis * 5 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 4);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 6
((Rectangle_Point_y.y + button_dis * 6 <= y) && (Rectangle_Point_y.y + button_dis * 6 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 5);
}
else if (((Rectangle_Point_y.x <= x) && (Rectangle_Point_y.x + Rectangle_Size.width >= x)) && //+ 7
((Rectangle_Point_y.y + button_dis * 7 <= y) && (Rectangle_Point_y.y + button_dis * 7 + Rectangle_Size.height >= y))) {
Plu_Min_Button_Event(1, 6);
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 1
((Set_Button_Pt.y + button_dis <= y) && (Set_Button_Pt.y + button_dis + Rectangle_Size.height >= y))) {
Set_Click = 0;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 2
((Set_Button_Pt.y + button_dis * 2 <= y) && (Set_Button_Pt.y + button_dis * 2 + Rectangle_Size.height >= y))) {
Set_Click = 1;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 3
((Set_Button_Pt.y + button_dis * 3 <= y) && (Set_Button_Pt.y + button_dis * 3 + Rectangle_Size.height >= y))) {
Set_Click = 2;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 4
((Set_Button_Pt.y + button_dis * 4 <= y) && (Set_Button_Pt.y + button_dis * 4 + Rectangle_Size.height >= y))) {
Set_Click = 3;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 5
((Set_Button_Pt.y + button_dis * 5 <= y) && (Set_Button_Pt.y + button_dis * 5 + Rectangle_Size.height >= y))) {
Set_Click = 4;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 6
((Set_Button_Pt.y + button_dis * 6 <= y) && (Set_Button_Pt.y + button_dis * 6 + Rectangle_Size.height >= y))) {
Set_Click = 5;
}
else if (((Set_Button_Pt.x <= x) && (Set_Button_Pt.x + Rectangle_Size.width + 20 >= x)) && //Set 7
((Set_Button_Pt.y + button_dis * 7 <= y) && (Set_Button_Pt.y + button_dis * 7 + Rectangle_Size.height >= y))) {
Set_Click = 6;
}
else if (((Title_Point.x + 136 <= x) && (Title_Point.x + 136 + Reset_Button_Size.width >= x)) &&
((Title_Point.y + button_dis * 8 <= y) && (Title_Point.y + button_dis * 8 + Reset_Button_Size.height >= y))) { //Cancel_Button
Setting_Mode_Flag = !Setting_Mode_Flag;
for (int i = 0; i < 7; i++) Accuracy_Percent[i] = Accuracy_Percent_Temp[i];
State_Message_S[7] = "Cancel";
State_Message();
State_Message_S[7] = "RUN";
State_Message();
flag = -1;
}
else if (((Title_Point.x + 206 <= x) && (Title_Point.x + 206 + Reset_Button_Size.width >= x)) &&
((Title_Point.y + button_dis * 8 <= y) && (Title_Point.y + button_dis * 8 + Reset_Button_Size.height >= y))) { //OK_Button
for(int i = 0; i < 28; i++) Inspect_ROI_Point[i] = Inspect_ROI_Point_Temp_List[i];
Standard_ROI.clear();
for(int i = 0; i < 28; i += 4){
Standard_ROI.push_back(Mat(frame, Rect(Point(Inspect_ROI_Point[i], Inspect_ROI_Point[i + 1]),
Point(Inspect_ROI_Point[i + 2], Inspect_ROI_Point[i + 3]))).clone());
}
cout << "Inspect_ROI : ";
for(int i = 0; i < 28; i += 4){
cout << Inspect_ROI_Point_Temp_List[i] << ", " << Inspect_ROI_Point_Temp_List[i + 1] << ", "
<< Inspect_ROI_Point_Temp_List[i + 2] << ", " << Inspect_ROI_Point_Temp_List[i + 3] << endl;
}
cout << endl<< endl;
cout << "Standard_ROI : ";
for(int i = 0; i < 7; i++){
cout << Standard_ROI[i].cols << ", " << Standard_ROI[i].rows << endl;
}
cout << endl;
for (int i = 0; i < 7; i++) Accuracy_Percent_Temp[i] = Accuracy_Percent[i];
FILE* fp_fin = fopen(data_addr, "w");
for (int i = 0; i < 7; i++) {
sprintf(Fput_STR, "%d\n", Accuracy_Percent[i]);
fputs(Fput_STR, fp_fin);
}
for (int i = 0; i < 28; i++) {
sprintf(Fput_STR, "%d\n", Inspect_ROI_Point[i]);
fputs(Fput_STR, fp_fin);
}
fclose(fp_fin);
flag = -1;
Setting_Mode_Flag = !Setting_Mode_Flag;
State_Message_S[7] = "OK";
}
}
////ALAM_MARK////
if (((0 <= x) && (113 >= x)) && ((0 <= y) && (30 >= y)) && event == EVENT_LBUTTONDOWN && Set_Flag != true) {
Setting_Mode_Flag = !Setting_Mode_Flag;
for(int i = 0; i < 28; i++) Inspect_ROI_Point_Temp_List[i] = Inspect_ROI_Point[i];
if (Setting_Mode_Flag == false) {
for (int i = 0; i < 7; i++) Accuracy_Percent[i] = Accuracy_Percent_Temp[i];
State_Message_S[7] = "RUN";
flag = -1;
}
else {
for (int i = 0; i < 7; i++) Accuracy_Percent_Temp[i] = Accuracy_Percent[i];
State_Message_S[7] = "SETTING_MODE";
flag = 3;
}
}
else if(Set_Flag == false && Set_Click != -1 && event == EVENT_LBUTTONUP){
Set_Flag = true;
Set_ROI_Mode();
}
else if (event == EVENT_LBUTTONDOWN && Set_Flag == true) {
temp = Point(x, y);
circle(Set_Frame, temp, 3, Scalar(0, 0, 255), -1);
State_Message_S[7] = "POINT_CLICK";
flag++;
}
else if (flags == EVENT_FLAG_LBUTTON && event == EVENT_MOUSEMOVE && flag == 4 && Set_Flag == true) {
rectangle(Set_Frame, Rect(temp, Point(x, y)), Scalar(0, 0, 255), 1);
circle(Set_Frame, temp, 3, Scalar(0, 0, 255), -1);
imshow("Show_Frame", Set_Frame);
Set_Frame = Set_Frame_Clone.clone();
}
else if (event == EVENT_LBUTTONUP && flag == 4) {
temp2 = Point(x, y);
for(int i = 0; i < 28; i += 4){
if(i / 4 == Set_Click){
Inspect_ROI_Point_Temp_List[i] = temp.x;
Inspect_ROI_Point_Temp_List[i + 1] = temp.y;
Inspect_ROI_Point_Temp_List[i + 2] = temp2.x;
Inspect_ROI_Point_Temp_List[i + 3] = temp2.y;
}
}
flag = 3;
Set_Flag = false;
Set_Click = -1;
}
}
int main() {
cap = VideoCapture(WEB_CAM); //WEB_CAM, TEST_VIDEO_1920P
if (!cap.isOpened()) {
cout << "Could not find or open Video" << endl;
return -1;
}
if (wiringPiSetupGpio() == -1) {
cout << "Could Not find or open wiringPi" << endl;
return -1;
}
pinMode(INPUT_DATA_RESET, INPUT);
pinMode(INPUT_PORT, INPUT);
for (int i = 0; i < sizeof(Led); i++) {
pinMode(Led[i], OUTPUT);
digitalWrite(Led[i], 0);
}
namedWindow("Show_Frame", WINDOW_FULLSCREEN);
setMouseCallback("Show_Frame", Mouse_Event);
cap.set(3, 640);
cap.set(4, 480);
width = 640;
height = 480;
cout << "Resolution : " << width << "x" << height << endl;
for (int i = 0; i < 10; i++) {
cap >> frame;
flip(frame, frame, 1);
imshow("Show_Frame", frame);
waitKey(1);
}
State_Message_Point.clear();
State_Message_Point.push_back(Point(15, height - 125));
State_Message_Point.push_back(Point(15, height - 110));
State_Message_Point.push_back(Point(15, height - 95));
State_Message_Point.push_back(Point(15, height - 80));
State_Message_Point.push_back(Point(15, height - 65));
State_Message_Point.push_back(Point(15, height - 50));
State_Message_Point.push_back(Point(15, height - 35));
State_Message_Point.push_back(Point(15, height - 20));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S.push_back(String(" "));
State_Message_S[7] = "Res : 640x480";
Accuracy_Percent[0] = 90;
Accuracy_Percent[1] = 90;
Accuracy_Percent[2] = 90;
Accuracy_Percent[3] = 90;
Accuracy_Percent[4] = 90;
Accuracy_Percent[5] = 90;
Accuracy_Percent[6] = 90;
for(int i = 0; i < 28; i++){
Inspect_ROI_Point_Temp_List[i] = 0;
Inspect_ROI_Point[i] = 0;
}
List_Scalar.clear();
for (int i = 0; i < 7; i++) List_Scalar.push_back(Scalar(0, 0, 255, 0));
FILE* total_file = fopen(total_data_addr, "r");
if (total_file != NULL) {
char line[10];
fgets(line, sizeof(line), total_file);
Compare_Total = atoi(line);
fclose(total_file);
}
FILE* good_file = fopen(good_data_addr, "r");
if (good_file != NULL) {
char line[10];
fgets(line, sizeof(line), good_file);
Compare_Good = atoi(line);
fclose(good_file);
}
FILE* bad_file = fopen(bad_data_addr, "r");
if (bad_file != NULL) {
char line[10];
fgets(line, sizeof(line), bad_file);
Compare_Bad = atoi(line);
fclose(bad_file);
}
/* vector<unsigned int> Config_Data;
FILE* fp = fopen(data_addr, "r");
if (fp != NULL) {
char line[255];
while (fgets(line, sizeof(line), fp) != NULL) {
Config_Data.push_back(atoi(line));
}
if (Config_Data.size() >= 1) {
Number_of_ROI = Config_Data[0];
}
if (Config_Data.size() >= 2) {
for (int i = 1; i < Number_of_ROI + 1; i++) {
Accuracy_Percent[i - 1] = Config_Data[i];
}
}
if (Config_Data.size() >= Number_of_ROI + 1) {
if ((Config_Data.size() - Number_of_ROI + 1) / 4 == Number_of_ROI) {
for (int i = Number_of_ROI + 1; i < Config_Data.size(); i += 2) {
Point temp_pt = Point(Config_Data[i], Config_Data[i + 1]);
Inspect_ROI_Point.push_back(temp_pt);
}
for (int i = 1; i < Number_of_ROI + 1; i++) {
char Fread_Path[100];
sprintf(Fread_Path, "%sROI_NUM_%d.PNG", img_data_addr, i);
Mat ROI_Image = imread(Fread_Path);
Standard_ROI.push_back(ROI_Image);
}
flag = -1;
}
}
fclose(fp);
}
*/
digitalWrite(Led[0], 1);
int key = 0;
clock_t start, end;
bool reset_signal = false;
while (1) {
start_signal = !digitalRead(INPUT_PORT);
if (start_signal == true) {
delay(50);
start_signal = !digitalRead(INPUT_PORT);
if (start_signal == true)
digitalWrite(Led[0], 0);
}
else {
digitalWrite(Led[0], 1);
digitalWrite(Led[1], 0);
digitalWrite(Led[2], 0);
}
reset_signal = digitalRead(INPUT_DATA_RESET);
if (start_signal == false) {
delay(50);
reset_signal = digitalRead(INPUT_DATA_RESET);
if (reset_signal == false) {
Compare_Total = 0;
Compare_Good = 0;
Compare_Bad = 0;
FILE* total_file = fopen(total_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Total);
fputs(Fput_STR, total_file);
fclose(total_file);
FILE* good_file = fopen(bad_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Bad);
fputs(Fput_STR, good_file);
fclose(good_file);
FILE* bad_file = fopen(good_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Good);
fputs(Fput_STR, bad_file);
fclose(bad_file);
}
}
start = clock();
cap >> frame;
if (frame.empty())
break;
flip(frame, frame, 1);
Show_Frame = frame.clone();
Compare_State(Scalar(0, 255, 255));
if (flag == 1) {
circle(Show_Frame, temp, 2, Scalar(0, 0, 255), -1);
char show_state_run[10] = "[SET]";
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 4);
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 255), 1);
}
else if (flag == -1 && key == 32) {
double result;
double maxv;
char maxv_S[11];
char result_S[10];
bool Compare_Flag = true;
for (int i = 0; i < 28; i += 4) {
Inspect_ROI = Mat(frame, Rect(Point(Inspect_ROI_Point[i], Inspect_ROI_Point[i + 1]),
Point(Inspect_ROI_Point[i + 2], Inspect_ROI_Point[i + 3])));
// cout << Inspect_ROI.cols << ", " << Inspect_ROI.rows << endl;
if(ROI_flag[i / 4] && (Inspect_ROI.cols > 10 && Inspect_ROI.rows > 10)) {
Mat Inspect_ROI_blur;
Mat Standard_ROI_blur;
blur(Inspect_ROI, Inspect_ROI_blur, Size(9, 9));
blur(Standard_ROI[i / 4], Standard_ROI_blur, Size(9, 9));
double Blue = 0, Green = 0, Red = 0, total_value = 0, total_pixel;
double std_Blue = 0, std_Green = 0, std_Red = 0, std_total_value = 0;
total_pixel = Inspect_ROI_blur.cols * Inspect_ROI_blur.rows;
for (int i = 0; i < Inspect_ROI_blur.rows; i++) {
for (int j = 0; j < Inspect_ROI_blur.cols; j++) {
Blue += (int)Inspect_ROI_blur.at<Vec3b>(i, j)[0];
Green += (int)Inspect_ROI_blur.at<Vec3b>(i, j)[1];
Red += (int)Inspect_ROI_blur.at<Vec3b>(i, j)[2];
}
}
for (int x = 0; x < Standard_ROI_blur.rows; x++) {
for (int y = 0; y < Standard_ROI_blur.cols; y++) {
std_Blue += (int)Standard_ROI_blur.at<Vec3b>(x, y)[0];
std_Green += (int)Standard_ROI_blur.at<Vec3b>(x, y)[1];
std_Red += (int)Standard_ROI_blur.at<Vec3b>(x, y)[2];
}
}
unsigned int dis_Blue = fabs(Blue - std_Blue);
unsigned int dis_Green = fabs(Green - std_Green);
unsigned int dis_Red = fabs(Red - std_Red);
cout << "BGR : " << Blue << ", " << Green << ", " << Red << endl;
cout << "std_BGR : " << std_Blue << ", " << std_Green << ", " << std_Red << endl;
cout << "dis_BGR : " << dis_Blue << ", " << dis_Green << ", " << dis_Red << endl;
//Comparision color wight Blue 50%, Green 25%, Red 25%, Because yellow is for sensitive reaction to colors.
double Blue_Percentage = (double)dis_Blue / std_Blue * 50;
double Green_Percentage = (double)dis_Green / std_Green * 25;
double Red_Percentage = (double)dis_Red / std_Red * 25;
maxv = Blue_Percentage + Green_Percentage + Blue_Percentage;
cout << "BGR Each Percentage : " << Blue_Percentage << ", " << Green_Percentage << ", " << Red_Percentage << endl;
maxv = 100 - maxv;
cout << "Maxv = " << maxv << endl;
sprintf(maxv_S, "%d : %.2f", i / 4 + 1, maxv);
State_Message_S[7] = maxv_S;
State_Message();
if (maxv < Accuracy_Percent[i / 4]) {
Compare_Flag = false;
}
}
}
end = clock();
result = (double)(end - start);
sprintf(result_S, "%.2fms", result / CLOCKS_PER_SEC);
State_Message_S[7] = result_S;
Compare_Total++;
/* FILE* total_file = fopen(total_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Total);
fputs(Fput_STR, total_file);
fclose(total_file);
if (Compare_Flag == false) {
Compare_Bad++;
Compare_State(Scalar(0, 0, 255));
FILE* fp_fin = fopen(bad_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Bad);
fputs(Fput_STR, fp_fin);
fclose(fp_fin);
digitalWrite(Led[2], 1);
}
else {
Compare_Good++;
Compare_State(Scalar(0, 255, 0));
FILE* fp_fin = fopen(good_data_addr, "w");
sprintf(Fput_STR, "%d\n", Compare_Good);
fputs(Fput_STR, fp_fin);
fclose(fp_fin);
digitalWrite(Led[1], 1);
}
*/ Compare_Flag = true;
for (int j = 0; j < 28; j += 4) {
if(ROI_flag[j / 4]){
char num_str[2];
int num = j / 4 + 1;
sprintf(num_str, "%d", num);
putText(Show_Frame, num_str, Point(Inspect_ROI_Point[j], Inspect_ROI_Point[j + 1]) - Point(5, 3), FONT_HERSHEY_SIMPLEX,
0.5, Scalar(0, 0, 255), 0.5);
rectangle(Show_Frame, Rect(Point(Inspect_ROI_Point[j], Inspect_ROI_Point[j + 1]),
Point(Inspect_ROI_Point[j + 2], Inspect_ROI_Point[j + 3])), Scalar(0, 0, 255), 1);
}
}
char show_state_run[10] = "[RUN]";
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 4);
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1);
start_signal = !digitalRead(INPUT_PORT);
while (start_signal) {
start_signal = !digitalRead(INPUT_PORT);
}
}
else if (flag == -1) {
for (int i = 0; i < 28; i += 4) {
if(ROI_flag[i / 4]){
char num_str[2];
int num = i / 4 + 1;
sprintf(num_str, "%d", num);
putText(Show_Frame, num_str, Point(Inspect_ROI_Point[i], Inspect_ROI_Point[i + 1]) - Point(5, 3), FONT_HERSHEY_SIMPLEX,
0.5, Scalar(0, 0, 255), 0.5);
rectangle(Show_Frame, Rect(Point(Inspect_ROI_Point[i], Inspect_ROI_Point[i + 1]),
Point(Inspect_ROI_Point[i + 2], Inspect_ROI_Point[i + 3])), Scalar(0, 0, 255), 1);
}
}
char show_state_run[10] = "[RUN]";
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 4);
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0), 1);
}
else if (flag == 3 && Setting_Mode_Flag == true) {
Setting_Mode();
char show_state_run[10] = "[SET]";
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 0), 4);
putText(Show_Frame, show_state_run, Point(width / 2, 25) + Point(-120, -2), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 0, 255), 1);
}
State_Message();
Center_Marking(width, height);
ALAM_Marking();
Compare_Result();
if (Set_Flag == false) imshow("Show_Frame", Show_Frame);
key = waitKey(33);
if (key == 27) {
flag = 99;
break;
}
}
for (int i = 0; i < sizeof(Led); i++) {
pinMode(Led[i], OUTPUT);
digitalWrite(Led[i], 0);
}
return 0;
}
'CELLON Vision > Source Code' 카테고리의 다른 글
CELLON I 1.4v 2023_04_11 (0) | 2023.04.11 |
---|---|
CELLON I UI 1.3v(현장 투입 소스코드) 2023_04_03 (0) | 2023.04.03 |
CELLON I UI 1.3v(수정) 2023_03_27 (0) | 2023.03.26 |
CELLON I 시료 걸쇠 Sobel 추출 UI 적용 데모(20230323) (0) | 2023.03.23 |
CELLON 2023_03_12 (LAN 통신 제외한 최종 투입) Aging_Code (0) | 2023.03.12 |