C++ 如何使用特定像素大小细化图像边框?OpenCV
我试图通过使16x24大小的边界像素变为0来细化图像。我不是想得到骨骼图像,我只是想缩小白色区域的大小。我能用什么方法?请开导我 这是我正在尝试细化的示例图像。它由16x24个白色块组成 编辑 我试着用这个C++ 如何使用特定像素大小细化图像边框?OpenCV,c++,opencv,image-processing,C++,Opencv,Image Processing,我试图通过使16x24大小的边界像素变为0来细化图像。我不是想得到骨骼图像,我只是想缩小白色区域的大小。我能用什么方法?请开导我 这是我正在尝试细化的示例图像。它由16x24个白色块组成 编辑 我试着用这个 cv::Mat img=cv::imread("image.bmp", CV_LOAD_IMAGE_GRAYSCALE);//image is in binary cv::Mat mask = img > 0; Mat kernel = Mat::ones(
cv::Mat img=cv::imread("image.bmp", CV_LOAD_IMAGE_GRAYSCALE);//image is in binary
cv::Mat mask = img > 0;
Mat kernel = Mat::ones( 16, 24, CV_8U );
erode(mask,mask,kernel);
但我得到的结果是
这不是我想要的。我想保持完全相同的形状,仅从边框上刮下16x24像素的白色。知道哪里出了问题吗?你想改变你的形象。请稍后回答,但您应该使用一个内核来侵蚀您的图像,该内核的大小是您想要去除的大小的两倍,加上1,如:
Mat kernel = Mat::ones( 24*2+1, 16*2+1, CV_8U );
请注意,我更改了块的高度和宽度的位置,我只知道opencv来自Python,但我非常确定其顺序与Python中的顺序相同。我正在尝试减小白色周围区域的大小。我不能从腐蚀中得到确切的形状。我的内核是否定义错误?我更新了问题。请查收。谢谢你说的16x24像素到底是什么意思?侵蚀实际上会填补图像中的白洞如果你想得到准确的效果,那么我担心侵蚀不是解决方案。白色像素是由16x24像素块构成的。表示每个16x24像素块内的值具有相同的值。有更好的收缩方法吗?我不确定还有其他方法。也许你可以试着玩你的侵蚀内核。好的。谢谢你的帮助