设置首页收藏本站
开启左侧

有关在vs上读取模板坐标的问题

[复制链接]
起司猫 发表于 2017-11-13 17:02:53 | 显示全部楼层 |阅读模式
悬赏50视觉币
前提:已经创建好模板所以要读去模板轮廓的最小外接矩形的坐标已经不用再读取一张图片
然而神奇的事情就发生
当不读取图片的时候,最小外接矩形的坐标读取显示为0,如图1
EDTJJ]`KK7E9%UZJ5@3D9HU.png
但加入读取图片的算子,就可以读取到模板矩形的最小外接矩形的坐标,运行效果如图2
@~[F0KXLO%]RNPO%@MZBYHI.png

但觉的真的跟read_image这个算子无关啊~好迷,希望能有大神能够解答问题。
附加调试代码,就注释掉read_image这个算子的结果就有不同。。。。。
这个代码是win32控制台工程文件
  1. #include <stdio.h>
  2. #include "HalconCpp.h"
  3. #include <Windows.h>

  4. using namespace Halcon;
  5. #pragma comment(lib, "HalconCpp.lib")


  6. int main()
  7. {


  8.         Hobject  Image, ModelContours, ContoursAffinTrans;
  9.         Hobject         Region1, RegionUnion1;

  10.         // Local control variables
  11.         HTuple   ModelID,HomMat2D1;
  12.         HTuple   Row, Column, Tuple;
  13.         HTuple   Row1, Column1, Row2, Column2;

  14.         set_system("border_shape_models", "false");
  15.         read_image(&Image, "C:/Users/Administrator/Desktop/imgs/1.bmp");
  16.         read_shape_model("C:/Users/Administrator/Desktop/zhujian/1233.shm", &ModelID);
  17.         read_tuple("C:/Users/Administrator/Desktop/imgs/123.tup", &Tuple);
  18.         Row = Tuple[0];
  19.         Column = Tuple[1];

  20.         int X,Y;
  21.         X= Row[0].I();
  22.         Y=Column[0].I();
  23.         printf("模板中心点坐标为:(%d,%d)\n",X,Y);

  24.         //读取模板并把模板仿射变换到原来的位置
  25.         get_shape_model_contours(&ModelContours, ModelID, 1);
  26.         vector_angle_to_rigid(0, 0, 0, Row, Column, 0, &HomMat2D1);
  27.         affine_trans_contour_xld(ModelContours, &ContoursAffinTrans, HomMat2D1);

  28.         //获得模板的最小外接矩形
  29.         gen_region_contour_xld(ContoursAffinTrans, &Region1, "filled");
  30.         union1(Region1, &RegionUnion1);
  31.         smallest_rectangle1(RegionUnion1, &Row1, &Column1, &Row2, &Column2);


  32.         int y1 = Row1[0].I();
  33.         int x1 = Column1[0].I();
  34.         int y2 = Row2[0].I();
  35.         int x2 = Column2[0].I();
  36.         printf("外接矩形左上角的坐标为:(%d,%d)\n", x1, y1);
  37.         printf("外接矩形右下角的坐标为:(%d,%d)\n", x2, y2);


  38.         
  39.         clear_shape_model(ModelID);
  40.         return 0;
  41. }
复制代码

需要的效果就是注释掉read_image这个算子,然后能够运行出图2的结果。

在halcon的代码:
  1. set_system ('border_shape_models', 'false')
  2. set_system('clip_region',false)
  3. * dev_set_part (0, 0, 1024, 1024)
  4. read_shape_model ('C:/Users/Administrator/Desktop/zhujian/1233.shm', ModelID)
  5. read_tuple ('C:/Users/Administrator/Desktop/imgs/123.tup', Tuple)
  6. Row :=Tuple[0]
  7. Column :=Tuple[1]

  8. *读取模板并把模板仿射变换到原来的位置
  9. get_shape_model_contours (ModelContours, ModelID, 1)
  10. vector_angle_to_rigid (0, 0, 0, Row, Column, 0, HomMat2D1)
  11. affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D1)
  12. *读取模板轮廓的坐标点
  13. rows :=[]
  14. cols :=[]
  15. count_obj (ContoursAffinTrans, Number)
  16. for I := 1 to Number by 1
  17.     select_obj (ContoursAffinTrans, ObjectSelected, I)
  18.     get_contour_xld (ObjectSelected, r, c)
  19.     rows:=[rows,r]
  20.     cols:=[cols,c]   
  21. endfor
  22. * gen_contour_region_xld (ContoursAffinTrans, Contours, 'border')


  23. stop ()

  24. numbers :=|rows|



  25. *获得模板的最小外接矩形
  26. gen_region_contour_xld (ContoursAffinTrans, Region, 'filled')
  27. union1 (Region, RegionUnion1)
  28. smallest_rectangle1 (RegionUnion1, Row1, Column1, Row2, Column2)
  29. gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
  30. dev_display (ContoursAffinTrans)
  31. dev_display (Rectangle)
复制代码
在halcon中不读取图片也是可以读到坐标的,然后有意思的是在halcon的路径中把halconcpp.dll删掉,同样读取不到坐标
注:在vs配置是没有问题的

Desktop.zip

671.04 KB, 下载次数: 1

创建的模板和数据

最佳答案

查看完整内容

halcon读取区域相关图形变量,如果没有图像作为底层载体,就会出现无法显示区域和轮廓的情况! 这个是halcon软件的问题,其实在halcon里面也是这样的。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
Criss 发表于 2017-11-13 17:02:54 | 显示全部楼层
halcon读取区域相关图形变量,如果没有图像作为底层载体,就会出现无法显示区域和轮廓的情况!
这个是halcon软件的问题,其实在halcon里面也是这样的。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

 楼主| 起司猫 发表于 2017-11-13 17:18:02 | 显示全部楼层
51Halcon 发表于 2017-11-13 17:06
halcon读取区域相关图形变量,如果没有图像作为底层载体,就会出现无法显示区域和轮廓的情况!
这个是halco ...

在halcon是可以读到的,好神奇,如果把halcon路径中的halconcpp.dll才读不到轮廓的坐标值。
在vs上的路径配置是没问题的
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

Criss 发表于 2017-11-13 17:31:07 | 显示全部楼层
原因是没有设置内部图像处理的宽度和高度,导致图形没法正常初始化!
1.如果你没有读取成功,这个时候显示了一张图片,再读取就可以读取成功了!
2.如果你原来有图像,肯定可以直接成功,因为每次读取图像这个tsp_*的值会自动更改,设置比较大即可!

游客,如果您要查看本帖隐藏内容请回复



奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

906727550 发表于 2017-11-17 14:16:20 | 显示全部楼层
:):):):):):):):):):)
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

飘逸的云 发表于 2018-4-3 20:34:31 | 显示全部楼层
学习了,很好的一个文章
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

dandelion 发表于 2018-5-5 07:50:28 | 显示全部楼层
看看,正好碰到这种问题
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

dianke09 发表于 2019-8-7 12:08:25 | 显示全部楼层
学习了,很好的一个文章
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

cgsn 发表于 2023-2-20 16:57:01 | 显示全部楼层
學習數字圖像處理可以幫助我們更好地了解數字圖像是如何工作的。
奖励计划已经开启,本站鼓励作者发布最擅长的技术内容和资源,流量变现就在现在,[点我]加入吧~~~Go
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表