void CMFC_HoughDlg::OnBnClickedHoughline()
{
// TODO: 在此添加控件通知处理程序代码
static int countnum=0;
char filename[200];
CString Text_dp,Text_minDist,Text_param1,Text_param2,Text_minRadius,Text_maxRadius,Text_downGrayValue,Text_upGrayValue;
GetDlgItemText(IDC_EDIT_dp, Text_dp);
GetDlgItemText(IDC_EDIT_minDist, Text_minDist);
GetDlgItemText(IDC_EDIT_param1, Text_param1);
GetDlgItemText(IDC_EDIT_param2, Text_param2);
GetDlgItemText(IDC_EDIT_minRadius, Text_minRadius);
GetDlgItemText(IDC_EDIT_maxRadius, Text_maxRadius);
GetDlgItemText(IDC_EDIT_downGrayValue, Text_downGrayValue);
GetDlgItemText(IDC_EDIT_upGrayValue, Text_upGrayValue);
cameras.dp=_ttol(Text_dp);
cameras.minDist=_ttol(Text_minDist);
cameras.param1=_ttol(Text_param1);
cameras.param2=_ttol(Text_param2);
cameras.minRadius=_ttoi(Text_minRadius);
cameras.maxRadius=_ttoi(Text_maxRadius);
cameras.downGrayValue=_ttoi(Text_downGrayValue);
cameras.upGrayValue=_ttoi(Text_upGrayValue);
if(HoughFlag==0) //0值时,检测圆
{
KillTimer(1); //关闭定时器,显示检测直线的图像
//edit control显示数值
CEdit* pstrX,* pstrY,* pstrRadius;
pstrX = (CEdit*) GetDlgItem(IDC_WIDTH);
pstrY = (CEdit*) GetDlgItem(IDC_HEIGHT);
pstrRadius = (CEdit*) GetDlgItem(IDC_RADIUS);
CString strX,strY,strRadius;
GetDlgItem(ID_HoughLine)->SetWindowText("停止检测");
if (capture.isOpened())
{
capture>>img; //显示检测图像
//判断是否输入参数
if(cameras.dp*cameras.minDist*cameras.param1*cameras.param2*cameras.minRadius*cameras.maxRadius*cameras.downGrayValue*cameras.upGrayValue-0<1e-6)
AfxMessageBox(_T("请输入参数"));
//sprintf_s(filename,"Picture %d.jpg",countSnap);
//imwrite(filename,picture); //图片保存到本工程目录中
else
{
if(!cameras.HoughCircle(img,dstImg,CenterX,CenterY,Radius)) //hough圆检测
{
AfxMessageBox(_T("未检测到螺孔,请调整背板或参数"));
GetDlgItem(ID_HoughLine)->SetWindowText("检测圆 ");
SetTimer(1,100,NULL); //定时器,定时时间和帧率一致*/ 比赛
HoughFlag++;
}
//显示到对话框
strX.Format("%.2f",CenterX);
strY.Format("%.2f",CenterY);
strRadius.Format("%.3f",Radius);
//赋值
pstrX-> SetWindowText(strX);
pstrY-> SetWindowText(strY);
pstrRadius-> SetWindowText(strRadius);
//以下操作获取图形控件尺寸并以此改变图片尺寸
CRect rect;
GetDlgItem(IDC_Picture)->GetClientRect(&rect);//获取Picture Control控件的大小
Rect dst(rect.left,rect.top,rect.right,rect.bottom);
resize(dstImg,midImage,cv::Size(rect.Width(),rect.Height()));
imshow(windows_name,midImage);
sprintf_s(filename,"Picture %d.jpg",countnum++);
imwrite(filename,dstImg); //图片保存到本工程目录中
}
}
else
{
AfxMessageBox("请打开相机");
GetDlgItem(ID_HoughLine)->SetWindowText("检测圆 ");
HoughFlag++;
}
}
else //关闭摄像头
{
GetDlgItem(ID_HoughLine)->SetWindowText("检测圆 ");
SetTimer(1,100,NULL); //定时器,定时时间和帧率一致
}
HoughFlag++;
HoughFlag %=2;
}
edit control显示数值
最新推荐文章于 2024-09-06 14:10:05 发布