大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
matlab移植C/C++代码时,发现不管是opencv还是IPP库都没有填充联通区域函数imfill(),于是只能自己动手了。
先展示一下imfill()函数的功能,如下图:
上图中,左图是一个二值图像,白色是手臂边缘像素值为1,黑色区域像素值为0,现在想将手臂填充1,用imfill()函数可以实现该功能,但C/C++代码需要自己实现。
C/C++代码:
bool imFill(Ipp8u *img, int width, int height)
{
vector<int> q;
int head = 1;
int tail = 1;
int pix_x;
int pix1_x;
int pix, pix1;
int nerghbour1[8] = { -1, -1, -1, 0, 0, 1, 1, 1 }; //行坐标偏移
int nerghbour2[8] = { -1, 0, 1, -1, 1, -1, 0, 1 }; //列坐标偏移
q.push_back(round(height / 2)*width + round(width / 2) - 1);
tail = tail + 1;
do
{
pix = q[head - 1];
pix_x = pix % width;
for (int i = 0; i < 8; i++)
{
pix1 = pix + nerghbour2[i] + nerghbour1[i] * width;
pix1_x = pix1 % width;
if (pix1 < height*width && pix1 > 0 && abs(pix1_x - pix_x) < 2)
{
if (img[pix1] == 0)
{
img[pix1] = 1;
q.push_back(pix1);
tail = tail + 1;
}
}
}
//q.erase(q.begin());
head = head + 1;
} while (head != tail);
return true;
}
继续搬砖了,原理改天附上。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/194492.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...