【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
图像处理是一个刚需。特别是工业图像处理,有这么几种方法。要么是有能力开发的公司,用opencv开发,或者是一些代理公司,用halcon或者是vision pro进行开发。但是所有的开发,都是需要公司具备一定的开发能力。但是还有一些场景,本身其实可以通过常用的算法,配合光源就可以做到很高的辨识度。这些小应用,其实可以通过easyx+图像算法就可以解决了。

1、通过easyx的api读取数据
前期开发的时候,一般就可以通过单个图像来进行处理。等到后期部署的时候,就可以接入usb camera,或者是网络摄像机进行处理。这是用easyx处理的一般方法。
2、图像处理的一般套路
对于图像处理,通常处理的办法就是灰化、降噪、边缘检测、膨胀、腐蚀、轮廓分割,这些都是套路。即使不用opencv写,自己写一下也不是很难的事情。但是这样做出来的软件就很小,也没有opencv、halcon的限制。
3、参数配置
配置过程中势必涉及到一些参数的设置,那么可以通过InputBox的方法进行参数调试。当然,如果调试的参数比较多,那么可以通过按键+窗口配置的方法,对不同的参数进行调试,这样比单纯的方法调试效率高很多。
4、接入的摄像头
接入的摄像头尽量用常用的摄像头,比如usb摄像头。如果厂家有网络摄像头和对应的SDK,也是可以的。拿不到网络摄像头的SDK,有rtsp地址、支持rtsp协议,这也是可以的。
5、外部第三方的API
还有一些应用是需要外部api支持的,比如某度、某巴巴,这些网络api也可以拓展我们的功能,比如身份证识别、驾驶证识别、车牌识别等等。
6、简单的demo
前面我们做过一个灰度图的案例,这里继续讲一个底片渲染的案例。整体流程差不多,首先是读入图片。读入之后,就是显示。显示完之后,通过GetImageBuffer获取地址,直接对像素数据进行处理。除了处理图片,这里多一个功能,那就是saveimage。
#include <graphics.h>
#include <conio.h>
// 底片效果
void ColorInvert(IMAGE *pimg)
{
// 获取指向显示缓冲区的指针
DWORD* pMem = GetImageBuffer(pimg);
// 直接对显示缓冲区赋值
for (int i = pimg->getwidth() * pimg->getheight() - 1; i >= 0; i--)
{
pMem[i] = (~pMem[i]) & 0x00FFFFFF;
}
}
// 主函数
int main(int argc, char* argv[])
{
// 初始化绘图环境
initgraph(512, 512);
// 获取图像
IMAGE img;
loadimage(&img, _T("./lena.png"));
// 显示原始图像
putimage(0, 0, &img);
// 任意键执行
_getch();
// 底片效果
ColorInvert(&img);
// 显示处理后的图像
putimage(0, 0, &img);
// 任意键关闭绘图环境
_getch();
// 保存图片
saveimage(_T("./lena_new.png"), &img);
closegraph();
return 0;
}