MFC 界面设计

yaojun123456789 yaojun123456789 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
想要做个界面,要完成功能的代码如下:
#include "iostream.h"
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include "cv.h"

#include "highgui.h"
#include "cxcore.hpp"
IplImage* src=NULL;
IplImage* bin=NULL;
IplImage* bing=NULL;
IplImage* psrc=NULL;
IplImage* dst=NULL;
#define max_corners 100
int thresh=134;
void on_trackbar(int thresh)
{
cvThreshold(psrc,bing,thresh,255,CV_THRESH_BINARY_INV);

cvShowImage("bing",bing);
}

main()

{
double scale=0.46;
int mode=CV_RETR_EXTERNAL;//提取轮廓模式
int contours_num=0,contours_nums=0;//提取的轮廓数目
// CvScalar external_color;//绘制轮廓线的颜色
CvMemStorage* storage=cvCreateMemStorage(0);
CvSeq* contour=0;//存储提取轮廓的序列指针
CvSize bin_cvsize;
CvSize bing_cvsize;
CvSize psrc_cvsize;

src=cvLoadImage("020.jpg",-1);
bin_cvsize.width=(int)(src->width*scale);
bin_cvsize.height=(int)(src->height*scale);
bin=cvCreateImage(bin_cvsize,src->depth,src->nChannels);
cvResize(src,bin,CV_INTER_LINEAR);
cvNamedWindow("bin",CV_WINDOW_AUTOSIZE);
cvShowImage("bin",bin);
dst=cvLoadImage("020.jpg",0);
bing_cvsize.width=(int)(dst->width*scale);
bing_cvsize.height=(int)(dst->height*scale);
bing=cvCreateImage(bing_cvsize,dst->depth,dst->nChannels);
cvResize(dst,bing,CV_INTER_LINEAR);
psrc_cvsize.width=(int)(dst->width*scale);
psrc_cvsize.height=(int)(dst->height*scale);
psrc=cvCreateImage(psrc_cvsize,dst->depth,dst->nChannels);
cvResize(dst,psrc,CV_INTER_LINEAR);
cvNamedWindow("bing",CV_WINDOW_AUTOSIZE);
cvCreateTrackbar("threshold","bing",&thresh,255,on_trackbar);// 滚动条设置
on_trackbar(thresh);
cvWaitKey(0);//等待按键
IplImage *Rol,*Rol_gray;//定义中间指针,指向感兴趣的区域
CvRect rect;//定义一个矩形,用来记录轮廓的矩形区域

//找到外轮廓
cvFindContours(bing,storage,&contour,sizeof(CvContour),CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0));
for(;contour;contour=contour->h_next)
{
int x,y;
if(contour->total<300)
continue;
//标记箱体区域
cvDrawContours(bin,contour,CV_RGB(255,0,0),CV_RGB(255,0,0),0,1,8,cvPoint(0,0));
//显示标记后的图像
cvNamedWindow("markImage",CV_WINDOW_AUTOSIZE);
cvShowImage("markImage",bin);
rect= ((CvContour*)contour)->rect;
cvSetImageROI(bin,rect);
Rol = cvCreateImage( cvSize(rect.width, rect.height), bin->depth, bin->nChannels );
Rol_gray = cvCreateImage( cvSize(rect.width, rect.height), bing->depth, bing->nChannels );

cvCopy(bin,Rol);

cvNamedWindow( "Rol", CV_WINDOW_AUTOSIZE ); //创建窗口
cvShowImage( "Rol", Rol); //显示图像
cvWaitKey(0); //等待按键
cvDestroyWindow( "markImage" );
cvDestroyWindow( "Rol" );

}
cvCvtColor(Rol,Rol_gray,CV_BGR2GRAY);//将彩色图转灰度图

//以固定阈值将图像二值化
cvThreshold(Rol_gray,Rol_gray,120,255, CV_THRESH_BINARY );
//有rent得到矩形的四角的坐标
CvPoint pt1, pt2;
pt1.x = rect.x;
pt1.y = rect.y;
pt2.x = rect.x + rect.width;
pt2.y = rect.y + rect.height;

//将rol区分割成12个部分,以便确定各个物体的位置
cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,0.34*rect.height),cvScalar(255,255,255),1);
cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,0.67*rect.height),cvScalar(255,255,255),1);
cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(rect.width,rect.height),cvScalar(255,255,255),1);

cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.25*rect.width,rect.height),cvScalar(255,255,255),1);
cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.5*rect.width,rect.height),cvScalar(255,255,255),1);
cvRectangle(Rol_gray,cvPoint(0,0),cvPoint(0.75*rect.width,rect.height),cvScalar(255,255,255),1);

cvNamedWindow( "Rolgray", 1 ); //创建窗口
cvShowImage( "Rolgray", Rol_gray); //显示图像
int i,j,k,sum = 0;

int height,width,step,Channels;

height=Rol_gray->height;
width=Rol_gray->width;
step =Rol_gray->widthStep;

uchar *data = (uchar*)Rol_gray->imageData;

for(i=0;i<0.34*height;i++) for(j=0;j<0.25*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1200)
printf("(1,1)位置缺");
sum = 0;

for(i=0;i<0.34*height;i++) for(j=0.25*width;j<0.5*width;j++)
{
if(data[i*step+j]>200)
sum++;

}
if(sum<1100)
printf("(1,2)位置缺");
sum = 0;

for(i=0;i<0.34*height;i++) for(j=0.5*width;j<0.75*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1000)
printf("(1,3)位置缺");
sum = 0;

for(i=0;i<0.34*height;i++) for(j=0.75*width;j<width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1200)
printf("(1,4)位置缺");
sum = 0;

for(i=0.34*height;i<0.67*height;i++) for(j=0;j<0.25*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1100)
printf("(2,1)位置缺");
sum = 0;

for(i=0.34*height;i<0.67*height;i++) for(j=0.25*width;j<0.5*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1000)
printf("(2,2)位置缺");
sum = 0;

for(i=0.34*height;i<0.67*height;i++) for(j=0.5*width;j<0.75*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1000)
printf("(2,3)位置缺");
sum = 0;

for(i=0.34*height;i<0.67*height;i++) for(j=0.75*width;j<width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1100)
printf("(2,4)位置缺");
sum = 0;

for(i=0.67*height;i<height;i++) for(j=0;j<0.25*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1200)
printf("(3,1)位置缺");
sum = 0;

for(i=0.67*height;i<height;i++) for(j=0.25*width;j<0.5*width;j++)
{
if(data[i*step+j]>200)
sum++;

}
if(sum<1100)
printf("(3,2)位置缺");
sum = 0;

for(i=0.67*height;i<height;i++) for(j=0.5*width;j<0.75*width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<1100)
printf("(3,3)位置缺");
sum = 0;

for(i=0.67*height;i<height;i++) for(j=0.75*width;j<width;j++)
{
if(data[i*step+j]>200)
sum++;
}
if(sum<2300)
printf("(3,4)位置缺");
cvWaitKey(0);
cvDestroyWindow( "Rolgray" );
cvDestroyWindow("src");
cvDestroyWindow("dst");
cvReleaseImage(&src);
cvReleaseImage(&psrc);
cvReleaseImage(&bin);
cvReleaseImage(&dst);
cvReleaseMemStorage(&storage);
return 0;

}

想做成如下的界面:

按下打开按钮。在左上角图像控件中显示原图:

按下二值化按钮,能得到下面带滚动条的图像,改变滚动条能显示相应阈值下的二值图。(就是这个老出错,解决不了)
向编辑框输入0-255之间的数字,按下检测按钮,根据输入的阈值,得到检测结果,显示在左下编辑框内,如:

最后按下保存结果按钮,将结果保存到excel里。
谢谢大家帮忙解决一下!!!
...全文

相关推荐

MFC界面设计高级教程

对于认识MFC中的各种界面元素,如何自绘窗口,按钮等等,和掌握UI方面的高级技术有帮助.

layabout4233629

MFC界面设计实战指南:原理与技巧

MFC的CWnd类允许通过窗口风格来定制窗口的外观和行为。例如,可以创建一个具有工具栏和状态栏的窗口,并为其设置特定的窗口风格。例如,要创建一个窗口并设置为无边框、无标题栏和固定大小的风格,可以这样写代码:在这个例子中,WS_POPUP创建一个弹出式窗口,使窗口初始状态为禁用。将窗口设置为工具窗口,而使其始终位于其他窗口之上。通过这些风格组合,可以实现各种自定义窗口效果。

智圈知识产权

MFC计算器制作----界面设计

MFC计算器制作----界面设计 我看了许多的博客,很多博客的计算器制作都是将代码直接复制上去,有时候不一定能看得懂,所以此篇博客将从头开始对计算器的制作进行详细的介绍。 这篇博客先介绍计算器的界面设计。 由于vs2017默认是没有MFC组件的,所以需要通过下载来获取。点击工具-&gt;获取工具和功能-&gt;独立组件(Individual Components)-&gt;Visual c++ M...

MikadoChen

全面掌握VC/MFC界面设计:实例与教程

MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于简化Windows应用程序的开发。它封装了Win32 API,让开发者能够使用面向对象的方式进行编程。MFC应用程序通常包含三个主要部分:应用程序框架、文档/视图和资源。框架负责消息循环和窗口管理,文档/视图负责数据的存储和展示,资源包括了应用程序的菜单、对话框、图标等。以上章节为MFC开发的入门知识点,构成了MFC编程基础。接下来,我们将深入探讨如何利用这些基础知识设计和实现窗口与对话框。

powerelectricdog

MFC登陆界面设计

本设计开发环境为VS2013,通过MFC构建界面,可支持用户的注册,修改密码,保存密码,同时还加入了头像以美化界面,运用多种控件,使用ini文件保存用户信息,能让你更快的学会MFC

小熊熊熊
评论 31
收藏 已收藏
分享
返回顶部
yaojun123456789
界面 15,976 成员 115,866 内容