文章预览:
- 一、MFC进行图像读取
- 二、MFC&OpenCv进行图像读取
- 三、MFC&Halcon进行图像读取
- 四、Qt&Halcon进行图像读取
一、MFC进行图像读取
对应按钮的实现函数:
1、绝对路径
void CQRCodeDemoDlg::OnBnClickedOpenImage()//打开图像
{
CImage img;
img.Load( _T("C:\Users\Aministrator\Desktop\111.jpg"));
CWnd *pWnd = GetDlgItem(IDC_PIC);
//获得当前窗口(IDC_PIC)的DC,传给一个CDC类的指针,因为画图往往是在DC中画的,这样获得当前窗口的DC就能在内存中绘图了
CDC *pDC = pWnd->GetDC();
RECT rect;
//获得当前窗口的客户区域
pWnd->GetClientRect(&rect);
//自适应显示
SetStretchBltMode(pdc->m_hDC,STRETCH_HALFTONE);
img.Draw(pDC->m_hDC,rect);
ReleaseDC(pDC);
}
注:
(1)GetDC()
函数功能描述:该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文(画布)的句柄,以后可以在GDI函数中用该句柄绘图.
(2)HDC是指窗体、控件的句柄,是长整类型,m_hDC
为HDC
类型的。pDC->m_hDC
:表示获取画布的句柄。
2、相对路径:
void CQRCodeDemoDlg::OnBnClickedOpenImage()//打开图像
{
Invalidate(); //刷新窗口,以便清除上一次显示的图片
int width, height;
CImage image;
CRect rect;
//创建打开图片的文件路径对话框
CFileDialog dlg(TRUE, NULL, NULL, 0, _T("All Files (*.*)|*.*|BMP (*.bmp)|*.bmp|DIB (*.dib)|*.dib|EMF (*.emf)|*.emf|GIF (*.gif)|*.gif|ICO (*.ico)|*.ico|JPG (*.jpg)|*.jpg|WMF (*.wmf)|*.wmf||"), NULL);
if (dlg.DoModal() == IDOK)
{
CString FilePathName = dlg.GetPathName();
image.Load(FilePathName);
CDC* pDC = GetDlgItem(IDC_STATIC_PIC)->GetDC();//获取picture的DC
HDC hDC = pDC->GetSafeHdc();// 获取 HDC(设备句柄) 来进行绘图操作
GetDlgItem(IDC_STATIC_PIC)->GetClientRect(&rect);//获取Picture Control控件的大小
//获取图片的宽 高度
width = image.GetWidth();
height = image.GetHeight();
// 求出picture control的宽和高
int rect_w = rect.Width();
int rect_h = rect.Height();
//当图片比绘图区域小
if (width rect_h)
{
double scale = (double)rect_h / (double)height; //缩放的比例因子
int tx = (int)(rect_w - width*scale) / 2;
int ty = 0;
SetRect(rect, tx, ty, tx + width*scale, rect_h); //设置新的矩阵区域
image.Draw(hDC, rect);//将图片绘制到picture表示的区域内
ReleaseDC(pDC);
}
}
}
二、MFC&OpenCv进行图像读取
1、构造函数初始化
namedWindow("view",WINDOW_AUTOSIZE);
//设置依附关系, 将cv窗口嵌入MFC主要是下述代码起作用了.
HWND hWnd = (HWND)cvGetWindowHandle("view");
HWND hParent = ::GetParent(hWnd);
::SetParent(hWnd,GetDlgItem(IDC_RECT1)->m_hWnd);
::ShowWindow(hParent,SW_HIDE);
2、对应的按钮实现函数里添加:
void CQRCodeDemoDlg::OnBnClickedOpenImage()//打开图像
{
// TODO: 在此添加控件通知处理程序代码
CString picPath; //定义图片路径变量服务器托管网
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, NULL, this); //选择文件对话框
if(dlg.DoModal() == IDOK)
{
picPath= dlg.GetPathName(); //获取图片路径
}
//CString to string 使用这个方法记得字符集选用“使用多字节字符”,不然会报错
string picpath=picPath.GetBuffer(0);
org=imread(picpath);
imagedst;
//以下操作获取图形控件尺寸并以此改变图片尺寸
CRect rect;
//使用GetDlgItem函数来访问对话框中的控件
GetDlgItem(IDC_RECT1)->GetClientRect(&rect);
//Rect dst(rect.left,rect.top,rect.right,rect.bottom);
resize(org,imagedst,cv::Size(rect.Width(),rect.Height()));
imshow("view",imagedst);
}
3、显示效果:
三、MFC&Halcon进行图像读取
对应按钮的实现函数:
void CQRCodeDemoDlg::OnBnClickedOpenImage()//打开图像
{
HObject ho_Image;
HTuple HWindowID;
CRect Rect;
HTuple m_HWindowID;
HTuple m_ImageWidth,m_ImageHeight;
//显示静态图片
ReadImage(&ho_Image, "C:/Users/lenovo/Desktop/test.jpg");
CWnd * pWnd = GetDlgItem( IDC_STATIC);
HWindowID = (Hlong)pWnd->m_hWnd;//获取父窗口句柄
pWnd->GetWindowRect(&Rect);
OpenWindow(0,0,Rect.Width(),Rect.Height(),HWindowID,"visible","",&m_HWindowID );
GetImageSize(ho_Image, &m_ImageWidth, &m_ImageHeight);
SetPart(m_HWindowID,0,0,m_ImageHeight-1,m_ImageWidth-1);
DispObj(ho_Image, m_HWindowID);
}
注:
(1)OpenWindow():将PictureControl控件的大小传给m_HWindowID,作为开辟的Halcon窗口的大小,这样两个窗口可以叠加在一起了。
(2)GetImageSize():获取ho_Image图片的尺寸
(3)SetPart()函数:是调整图片在窗口中的位置(设定图片左上角坐标和右下角坐标)
四、Qt&Halcon进行图像读取
#include "qfiledialog.h"
void MF服务器托管网_Vision_TestForm::slot_setImage()
{
HObject mImage;
HTuple ho_width, ho_height;
QFileDialog fileDlg(this);
fileDlg.setWindowTitle("Choose Pictures");
QStringList qstrFilters;//设置文件过滤器的list
qstrFilters fromUnicode(pathList[0]).data();
HTuple FileName;
FileName = HTuple(name.c_str()); //QString转QByteArray的方法 Latin道标ASCII
ReadImage(&mImage, FileName);
}
}
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net