halcon C++编程 第7讲 图像读写显示(tcy)
C++ 实现图片的读写;模仿opencv的格式写图片自动按后缀进行。图片显示HObject,HImage单张。同时封装一个一次显示多张图片。测试:#include <iostream>#include <vector>#include <assert.h>#include "imageheader.h"using namespace std;int main()
·
C++ 实现图片的读写;模仿opencv的格式写图片自动按后缀进行。
图片显示HObject,HImage单张。同时封装一个一次显示多张图片。
测试:
#include <iostream>
#include <vector>
#include <assert.h>
#include "imageheader.h"
using namespace std;
int main() {
const char* girl = "../pictures/girl.jpg";
const char* gray = "../pictures/gray.jpg";
HalconClass a;
a.set_System();
//显示一个图片
HObject obj = cv::imread_ha(girl);
cv::imshow_ha("ddd", obj);
HImage youlun("patras"), fengjing("plit2");
cv::imshow_ha("dd1",fengjing);
//一次显示多个图片
cv::imshow_ha("dd1", &obj, "dd2", &youlun);
}
函数封装: 读图片
/************************************
图像读写:tcy shanghai 2021/3/17 V1.0
*************************************/
/*
cv::Mat imread(string,int flag=1);
void imshow(string winname,Mat mat)
int waitKey(int delay=0)
void namedWindow(string str,int flag=1)
void destroyWindow(string winname)
void destroyAllWindows()
bool imwrite(string filename,img)//成功返回true
*/
HalconCpp::HObject cv::imread_ha(const std::string & filename, int flag)
{
HalconCpp::HObject image;
HalconCpp::ReadImage(&image, filename.c_str());
if ((flag != -1) && (flag != 4)) {
HalconCpp::HTuple channels;
HalconCpp::CountChannels(image, &channels);
if ((flag == 0) && (channels[0].I() >= 3))
HalconCpp::Rgb1ToGray(image, &image);
}
return image;
}
函数:写图片
void cv::imwrite_ha(const char * filename, const HalconCpp::HObject & image, int fillcolor)
{
/*
write_image(Image::Format,FillColor,FileName:)
*/
std::string extension = get_file_extension(filename);
std::string format[] = { "tiff","bmp","jpeg","jp2","png","ima" };
bool notexists = false;
for (auto i = 0; i < 6; ++i)
{
if (format[i] == extension) { notexists = true; break; }
}
if (notexists) throw ("Not exists file format:" + extension);
HalconCpp::WriteImage(image, extension.c_str(), fillcolor, filename);
}
函数:显示一张图片
/************************************
图像显示:tcy shanghai 2021/3/17 V1.0
*************************************/
#define __imshow_ha__(winname,image) \
{ \
HTuple width, height; \
\
HalconCpp::GetImageSize(image, &width, &height); \
HWindow w(0, 0, width, height); \
w.SetWindowParam("window_title", winname.c_str());\
\
image.DispObj(w); \
w.Click(); \
w.ClearWindow(); \
}
void cv::imshow_ha(std::string winname, const HalconCpp::HObject& image) {
__imshow_ha__(winname, image);
}
void cv::imshow_ha(std::string winname, const HalconCpp::HImage& image) {
__imshow_ha__(winname, image);
}
函数:一次显示多个图片
void cv::imshow_ha(std::string name1,HalconCpp::HObject*img1,
std::string name2,HalconCpp::HObject*img2,
std::string name3,HalconCpp::HObject*img3,
std::string name4,HalconCpp::HObject*img4,
std::string name5,HalconCpp::HObject*img5,
std::string name6,HalconCpp::HObject*img6,
std::string name7,HalconCpp::HObject*img7,
std::string name8,HalconCpp::HObject*img8)
{
HObject ho_Image, ho_Image1;
HTuple id1, id2, id3, id4, id5, id6, id7, id8,w,h;
std::vector<HalconCpp::HObject*> imgs{img1,img2,img3,img4,img5,img6,img7,img8};
std::vector<std::string> names{name1,name2,name3,name4,name5,name6,name7,name8};
std::vector<HalconCpp::HTuple> ids{ id1, id2, id3, id4, id5, id6, id7, id8 };
if (HDevWindowStack::IsOpen())
CloseWindow(HDevWindowStack::Pop());
for (auto i = 0; i < 8; ++i)
{
if (imgs[i] != NULL) {
SetWindowAttr("window_title", names[i].c_str());
GetImageSize(*imgs[i], &w, &h);
OpenWindow(0, 0, w, h, 0, "visible", "", &ids[i]);
HDevWindowStack::Push(ids[i]);
}
}
for (auto i = 0; i < 8; ++i)
{
if (imgs[i] != NULL) {
HDevWindowStack::SetActive(ids[i]);
if (HDevWindowStack::IsOpen())
DispObj(*imgs[i], HDevWindowStack::GetActive());
}
}
system("Pause");
}
更多推荐
所有评论(0)