OPENCV:为击中创建一个正方形结构元素
OpenCV: create a square Structuring element for HIT-MISS
我想要一个函数来创建一个"正方形"结构元素,例如:
Mat explicit_kernel = (Mat_<int>(5, 5) <<
-1, -1, -1, -1, -1,
-1, 1, 1, 1, -1,
-1, 1, 1, 1, -1,
-1, 1, 1, 1, -1,
- 1, -1, -1, -1, -1);
所以我试图做一个丑陋的循环:
Mat generate_kernel(int size)
{
if (size % 2 == 0)
{
printf("Input %i, not even, replaced by %in", size, size + 1);
size++;
}
Mat out = Mat::ones(size + 2, size + 2, CV_8S);
for (int i = 0; i <= size + 1; i++)
{
for (int j = 0; j <= size + 1; j++)
{
if (i == 0 || i == size - 1)
{
out.at<int>(i, j) = -1;
}
else
{
if (j == 0 || j == size - 1)
{
out.at<int>(i, j) = -1;
}
}
}
}
//Mat out = getStructuringElement(MORPH_RECT, Size(size, size), Point(-1, -1));
return out;
}
但是我有一个"违规书写错误",无论如何我正在寻找一个更容易的需求,代码的主要目的是在循环中制作结构元素: - 大小1的正方形,尺寸3 ...谢谢:)
我找到了一个解决方案,考虑到CV :: MAT是指针,并且创建一个子矩阵
Mat generate_kernel(int size)
{
if (size % 2 == 0)
{
printf("Input %i, not even, replaced by %in", size, size + 1);
size++;
}
Mat out = -1 * Mat::ones(size + 2, size + 2, CV_8S);
Mat center = Mat(out, Rect(1, 1, size, size));
center = Mat::ones(size, size, CV_8S);
return out;
}
这可能已经通过cv::copyMakeBorder
方法来处理。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
Mat generate_kernel(int size, int outer_size=1)
{
if (size % 2 == 0)
{
printf("Input %i, not even, replaced by %in", size, size + 1);
size++;
}
Mat out = Mat::ones(size, size, CV_8S);
copyMakeBorder(out,
out,
outer_size, // top
outer_size, // bottom
outer_size, // left
outer_size, // right
BORDER_CONSTANT,
Scalar(-1.0));
return out;
}
int main(int argc, const char * argv[]) {
cout << "Size 1: " << generate_kernel(1) << endl;
cout << "Size 3: " << generate_kernel(3) << endl;
cout << "Size 5: " << generate_kernel(5) << endl;
return 0;
}
它将生成以下....
Size 1: [ -1, -1, -1;
-1, 1, -1;
-1, -1, -1]
Size 3: [ -1, -1, -1, -1, -1;
-1, 1, 1, 1, -1;
-1, 1, 1, 1, -1;
-1, 1, 1, 1, -1;
-1, -1, -1, -1, -1]
Size 5: [ -1, -1, -1, -1, -1, -1, -1;
-1, 1, 1, 1, 1, 1, -1;
-1, 1, 1, 1, 1, 1, -1;
-1, 1, 1, 1, 1, 1, -1;
-1, 1, 1, 1, 1, 1, -1;
-1, 1, 1, 1, 1, 1, -1;
-1, -1, -1, -1, -1, -1, -1]
相关文章:
- 在 OpenGL 中旋转一个正方形
- 我无法完全理解这段代码来检查一个完美的正方形
- 编写一个函数,用递归函数检查数字是否是正方形
- 我的任务是在框架内打印一个字符串,例如一个正方形
- 找出一个正方形逻辑中可能的网格数量,但代码不接受超过六个输入,它停止并说.exe停止工作
- OPENCV:为击中创建一个正方形结构元素
- 创建一个正方形大小可变的棋盘
- QPixmap将绘制的正方形的内容复制到另一个图像中
- 在正方形矩阵中,每个单元格都是黑色或白色.设计了一个算法来寻找最大白色子平方
- DirectX 11制作一个正方形
- 读取 4 点的坐标.他们做一个正方形吗?
- 我需要使用嵌套的 while 循环打印一个正方形。我想我已经用正确的逻辑对其进行了编码,但它没有给我所需的输出
- 图标是SFML中的一个暗正方形
- 正方形作为一个类
- 是否有一个c++源/lib来解决2D Bin Packing使用矩形Bin(而不是正方形)和旋转
- 如何计算一个非正方形(矩形)矩阵的正交基
- 如何制作一个当用户按下某些键时改变颜色的正方形
- 显示一个棋盘与每个正方形作为一个对象- c++ QT
- 我必须在c++中画一个正方形里面的正方形
- OpenGL -最简单的方法来绘制一个正方形与纹理