图形学
文章平均质量分 78
图形学
闻缺陷则喜何志丹
本人拙作《喜缺全书算法册》欢迎指教,可在CSDN下载https://download.csdn.net/download/he_zhidan/88368465
展开
-
HObject复制耗时试用
如果不用非安全代码,HObject(img.Key)可以替换img.Clone(),前者用时更少。原创 2024-09-21 07:00:00 · 640 阅读 · 1 评论 -
避免halcon的HObject被释放
某项目由我统一管理HObject(区域和图像)的释放。发现某区域被释放。可能有两种情况:a,区域交给我后,释放了。b,获取我的区域后释放了。最终证明是第二种情况,证明如下:a,Add函数复制区域,Get函数不复制区域,问题依然存在。b,Add函数不复制,Get函数复制问题消失。和项目程序员沟通的结果是:大家都没修改。难道是旧代码的问题?Get函数中,之前改成:在Dispose函数中加断点:通过调用堆栈定义到问题所在。果然是旧代码。原创 2024-08-20 10:41:03 · 430 阅读 · 11 评论 -
StretchDIBits 直接使用cv::Mat的数据有可能显示错误的问题
StretchDIBits(hDC, 0, 0, img.cols,//drect.right, //显示窗口宽度 img.rows,//drect.bottom, //显示窗口高度 0, 0, img.cols, //图像宽度 img.rows, //图原创 2017-07-16 10:44:00 · 813 阅读 · 0 评论 -
cv::imread读取文件失败
环境:VS2010 + OPENCV 2.4.10不是图片的问题,cvLoadImage 可以成功读取。最终发现问题是:Debug版的exe调用Release版的lib引起的。原创 2017-07-04 11:01:58 · 2076 阅读 · 0 评论 -
cv::sort和cv::sortIdx
//按行按 升序排序 uchar a[][3] = {{1,2,13},{6,5,14},{7,8,19}}; cv::Mat mat(1,9,CV_8UC1,a,1); cv::sort(mat,mat,CV_SORT_EVERY_ROW + CV_SORT_ASCENDING);//按行按 升序排序索引uchar a[][3] = {{11,12,13原创 2017-09-07 16:53:36 · 3884 阅读 · 0 评论 -
直接对三通道的HObject 阈值分割 结果如何?
对于100M的大img,dUse1到15毫秒,dUse2大约7.8毫秒,dUse3大约8.2毫秒。假定猜测二正确,对结果用ReduceDomain ,各通道的结果会受其它通道干扰。操作系统win7 开发工具:VS2022 图像处理库:halcon12。CreateImage函数用于 指定宽度和byte数组创建图像。猜测一:只对第一个通道进行阈值分割,可能有多个区域。猜测二,对三个通道分别进行阈值分割,有多个区域。区域数量1,面积0。区域数量1,面积1。区域数量1,面积2。结论证明猜测一正确。原创 2023-08-10 14:39:51 · 144 阅读 · 0 评论 -
halcon SetPart的缺陷
代码:void ShowRect(int iWideSize) { hWindowControl1.HalconWindow.ClearWindow(); hWindowControl1.HalconWindow.SetPart(0, 0, iWideSize, iWideSize); HObject rect; HOperatorSet.GenRectangle1(out rect, 0,...原创 2021-12-22 11:52:04 · 627 阅读 · 0 评论 -
threshold用时
threshold 16000行,16000列,用时13msthreshold 16000行,3列,大约1.3ms某个算法,我优化后反而大大变慢 才发现的。VC2013 halcon10。可能原因: halcon进行了加速。原创 2022-02-23 18:30:18 · 466 阅读 · 0 评论 -
8邻域的01模式和连通性
d1右边的点,d2右上,d3上... 前景点的灰度为1,背景点的灰度0方法一:d1-d1*d2*d3+d3-d3*d4*d5+d5-d5*d6*d7+d7-d7*d8*d1方法二:8邻域的01模式和。这两种方法的结果不一样,256种情况有90多种不同。这90多种情况的bmp见压缩包,http://download.csdn.net/download/he_zhidan/997269原创 2017-09-11 10:08:42 · 1402 阅读 · 1 评论 -
并行Zhang细化算法FPA算法
并行Zhang细化算法 和 FPA算法 ,的规则好像完全一样。// p9 p2 p3 // p8 p1 p4 // p7 p6 p5 前景点为1,背景点为0条件1:p1为前景点条件2: 8邻域的点数>=2且条件3: 8领域01模式数为1。条件4:p2 * p4 * p6 == 0 条件5:p4 * p6 * p8 == 0条件原创 2017-09-11 18:46:03 · 1992 阅读 · 0 评论 -
halcon 区域Region(HObject)的传输
/region有4个点(1,1),(1,2),(2,1),(2,2)//region有4个点(5,1),(5,2),(6,1),(6,2)//region有4个点的行长码: 1行1列到2列 2行1列到2列。存储文件,以二进制的方式读取,存储格式就是游程编码。末尾是行号 起始列号 结束列号。也可使用GenRegionPoints。获取:游程编码,行号、起始列、行列。原创 2023-09-15 09:13:26 · 359 阅读 · 1 评论 -
HOperatorSet.Connection 有内存泄漏或缓存
换了halcol18 halcon12的 debug release都如此。Win7 VS2002 halcon12, 直接运行Debug的exe。先释放regionConnect和先释放region 都如此。大约占用200M,两者的顺序不影响结果。原创 2023-08-31 08:34:12 · 838 阅读 · 0 评论 -
HOperatorSet.GenRectangle1 参数是负数的矩形
默认会被裁剪掉。HOperatorSet.SetSystem("clip_region", "false");就好了原创 2021-12-22 13:14:43 · 828 阅读 · 0 评论 -
HALCON error #1201: Wrong type of control parameter: 1 in operator threshold
HALCON error #1201: Wrong type of control parameter: 1 in operator threshold错误代码:HTuple tMin, tMax; tMin.Append(3).Append(5.5); tMax.Append(4.0).Append(8); Hobject region; Halcon::threshold(img, ®ion,tMin, tMax);错误原因:tMin各元素类型...原创 2022-02-28 10:52:33 · 2675 阅读 · 0 评论 -
为cv::Point 重载了<,但VS2010找不到
将此<放到命名空间cv中就可以了原创 2017-08-18 13:23:02 · 400 阅读 · 0 评论 -
关于HOperatorSet.CountChannels的注意事项
两台电脑的相机都是5120*5120,存储的文件大下不一样,一个75M,一个100M。怀疑通道数一个为3,一个为4。用HOperatorSet.CountChannels通道数为3和1,不是3和4。发现一个相机有一个3通道的HObject,一个相机有4个1通道的HObject。请硬件人员调成一致。原创 2023-09-07 09:30:38 · 128 阅读 · 0 评论 -
关于Halcon::threshold 用时
Halcon::threshold 利用HTuple一次二值化两组区域比两次Halcon::threshold略快,不到5%。测试环境:VC2013 halcon10CWatch watch; for (int i = 0; i < 100; i++) { Halcon::threshold(imgCoatCheck, &m_regions.m_regionCoatLightNG, dMedialCoatCheckGray + iNGDiffGray, ...原创 2022-02-25 15:44:15 · 359 阅读 · 0 评论 -
矩阵初始化的缺陷
int a[][3] = {{1,2,3},{6,5,4},{7,8,9}}; cv::Mat mat(1,9,CV_8UC1,a,1);结果为:1,0,0,0,2,0,0,0,3这样改就好了"int a[][3] => uchar a[][3] ",结果就是1,2,3,4,5,6,7,8,9了原创 2017-09-07 12:42:22 · 424 阅读 · 0 评论 -
HOperatorSet.Rgb1ToGray的原理研究
我们来试验一下,转换细节。我创建三个1*1的灰度图,分别测试以小六种情况。原始定义:rgb1_to_gray 类似函数rgb3_to_gray。开发环境:win7 + VS2022 + halcon12。规则很明显,从官网查到的如下,和我们的测试结果类似。六,R=200,G=200,B=200。二,R=200,G=0 ,B = 0。三,R=0 ,G=200,B=0。五,R=200,G=200,B=0。一,R=100,G=0,B=0。四,R=0,G=0,B=200。原创 2023-08-12 09:22:28 · 237 阅读 · 0 评论 -
findContours
findContours 会改变第一个参数(矩阵)的值, 一定要留意。原创 2017-07-23 10:29:02 · 456 阅读 · 0 评论 -
halcon的Hobject转HObject
非托管C++代码:class CPLUSALOG_API_20211029 CCTest{public: CCTest(); int* Get(); ~CCTest();protected: Hobject* m_pRegion;} CCTest::CCTest(){ m_pRegion = new Hobject(); Halcon::gen_circle(m_pRegion, 10.0, 10, 10);}int* CCTest::G...原创 2022-01-25 10:11:57 · 1561 阅读 · 3 评论 -
GenImageInterleaved Wrong type of control parameter 1
HALCONerror#1201:Wrongtypeofcontrolparameter1源码:HObjectrgbImage;constintiRow=1;constintiCol=1;constcharsz[3*iRow*iCol]={1,2,3};try{HalconCpp::GenImageInterleaved(&...原创 2022-05-31 09:50:32 · 1149 阅读 · 2 评论 -
HOperatorSet.GenRandomRegions 有内存泄漏或缓存,释放不掉
除生成的区域数量外,全部用halcon样例的默认值。原创 2023-09-01 09:18:31 · 610 阅读 · 0 评论 -
double误差引起的缺陷
软件架构师何志丹void CDoublePoint::ChangeToDirect() { if( x > 0 ) { x = 1 ; } else if( x { x = -1; } if( y > 0 ) { y = 1 ; } else if( y { y = -1 ;原创 2017-12-01 15:55:23 · 498 阅读 · 0 评论 -
已加载菜单组 DDF
原因:cuix默认菜单组名称DDF,如果不修改容易重复。解决方案:修改菜单组名。具体步骤:1,CAD cui命令 打开“自定义用户界面"。2,打开需要加载的cuix文件。3,修改菜单组名。...原创 2021-08-31 13:43:48 · 170 阅读 · 0 评论 -
CAdUiBaseDialog 闪烁
软件架构师何志丹CModifyDialog派生于CAdUiBaseDialog,以下代码“确定”关闭对话框时 会闪烁。void CModifyDialog::OnOK(){ CAdUiBaseDialog::OnOK(); CModifyDialog::BeginEditorCommand(); NewEntityIfNeed() ; CModifyDialog::Co原创 2018-02-07 13:59:38 · 616 阅读 · 0 评论 -
error C2065: “IAcadPreferences”: 未声明的标识符
软件架构师何志丹error C2065: “IAcadPreferences”: 未声明的标识符解决方法:#include "acadi.h"无法解析的外部符号 IID_IAcadApplication#include "acadi_i.c"原创 2018-01-08 11:15:26 · 575 阅读 · 0 评论 -
VC7(VS2002)的arx项目转VC8(VS2005)项目,注意事项
VC7(VS2002)的arx项目转VC8(VS2005)项目,注意事项:多字符改成宽字符wchar_t,改成内置类型lib,dll(arx)的生成和引用路径 很可能需要改。原创 2015-08-10 11:20:33 · 789 阅读 · 0 评论 -
Objectarx 遇到的坑
3软件架构师何志丹 一,已解决。 1, 工作者线中调用acDocManager->sendStringToExecute,如果第三个参数(bActivate)为true,则在CAD2010下崩溃,CAD2018不会崩溃。 2,acad.rx会自动加载arx,但如果有多个搜索目录有acad.rx只有第一个acad.rx起作用。解决方法:用acad.lsp。如果多个搜索目...原创 2018-06-09 10:02:56 · 1588 阅读 · 0 评论 -
AcDbAlignedDimension setDimLinePoint
软件架构师何志丹AcDbAlignedDimension setDimLinePoint 设置了新值后,再次打开后失效。setDimLinePoint 后,马上dimLinePoint结果是新值。xLine2Point 无此问题。 解决方法:同时 :if (!pDim->isUsingDefaultTextPosition()) ...原创 2017-11-11 11:59:17 · 998 阅读 · 0 评论 -
ojbectarx动态命令(命令别名)
软件架构师何志丹:ojbectarx动态命令(命令别名)实现 个性化配置原创 2017-12-13 11:45:48 · 460 阅读 · 0 评论 -
acutPrintf AcString
软件架构师何志丹acutPrintf(_T("%s"),str); 有时正确,有时有问题,改成acutPrintf(_T("%s"),str.constPtr());原创 2017-11-17 10:09:53 · 1118 阅读 · 2 评论 -
禁止PROPERTIES命令
软件架构师何志丹派生于 AcApDocManagerReactor类,并重载documentLockModeChanged。virtual void documentLockModeChanged(AcApDocument* , AcAp::DocLockMode myPreviousMode, AcAp::DocLockMode my原创 2018-02-05 11:16:13 · 554 阅读 · 0 评论 -
delete CCmdPaletteSet崩溃
软件架构师何志丹class CCmdPaletteSet : public CAdUiPaletteSet {//...} ;BOOL CCmdPaletteSet::Create(CWnd *pwndParent,LPCTSTR strTitle){//... AddPalette(&m_palatte); return TRUE;}崩原创 2018-01-31 17:57:56 · 290 阅读 · 0 评论 -
自定义实体中如何画MText
软件架构师何志丹Adesk::Boolean XXXX::subWorldDraw(AcGiWorldDraw* mode)//...AcDbMText* pMText = new AcDbMText(); pMText->setContents(_T("何志丹")); pMText->setLocation(AcGePoint3d(0,0,0)); pMText-原创 2017-10-24 10:40:35 · 519 阅读 · 0 评论 -
修改AcDbDimension标注颜色
软件架构师何志丹{ AcCmColor color1,color2,color3; color1.setColorIndex(1); color2.setColorIndex(2); color3.setColorIndex(3); AcDbAlignedDimension* p = new AcDbAlignedDimension();原创 2017-10-24 11:31:15 · 1257 阅读 · 0 评论 -
打印戳记
PLOTSTAMP设置打印戳记,再在“打印”对话框开启打印戳记。经在AutoCAD2006上操作,打印机和虚拟打印机上都可以。遗憾的是打印戳记的比例不是1:200之类,而是0.0333:0.4,不符合中国人的习惯。原创 2014-12-19 09:41:35 · 752 阅读 · 0 评论 -
setPlotType eInvalidInput
软件架构师何志丹开发运行环境:VS2010 + CAD2014X64出错代码: void SetPlotWindowArea(const double xmin,const double ymin, const double xmax,const double ymax ) { m_es = m_pPSV->setPlotType(m_pPlotSettings,AcDbPlotSetti...原创 2018-02-08 15:19:45 · 1743 阅读 · 3 评论 -
CAD2014 X64 调试arx
软件架构师何志丹开发环境:VS2010 运行环境:CAD2014 X64 不能调试arx问题描述:VS2010一附加CAD2014,就崩溃原因: cad 加载了别人的lisp 插件, 不加载此插件,就可以附加了注意:1,VS2010 只有32位,没有64位。2,VS2010附加X64的CAD,和VS2002附加32位的CAD相同,无需额外的配置。原创 2017-11-30 11:29:00 · 1455 阅读 · 0 评论 -
标注样式各属性的复制
软件架构师何志丹针对场景:setDimensionStyle 时,程序崩溃或实体消失或其它异常。 可以用此函数 看是那行崩的。 // AcDbDatabase, AcDbDimstyleTableReco...原创 2018-08-15 11:21:37 · 1176 阅读 · 0 评论