bir*_*rdy 2 c++ python opencv image-processing
我想从现有图像中裁剪出图像.我已经拍摄了一张图像并98%使用imagemagick 在阈值上应用了单色(这在openCV中是可行的吗?)
生成的图像是这样的:

现在从这个图像我想裁剪出另一个图像,以便最终图像看起来像这样:

问题 如何在OpenCV中执行此操作?请注意,我想裁剪图像的唯一原因是我可以使用此答案来获取文本的一部分.如果不需要裁剪出新的图像,而只是开始专注于图像的黑色部分,那就太棒了.
如果顶部和底部的文本是您要裁剪的区域,如果它们始终位于同一位置,则解决方案很简单:只需设置忽略这些区域的ROI:
#include <cv.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
cv::Mat img = cv::imread(argv[1]);
if (img.empty())
{
std::cout << "!!! imread() failed to open target image" << std::endl;
return -1;
}
/* Set Region of Interest */
int offset_x = 129;
int offset_y = 129;
cv::Rect roi;
roi.x = offset_x;
roi.y = offset_y;
roi.width = img.size().width - (offset_x*2);
roi.height = img.size().height - (offset_y*2);
/* Crop the original image to the defined ROI */
cv::Mat crop = img(roi);
cv::imshow("crop", crop);
cv::waitKey(0);
cv::imwrite("noises_cropped.png", crop);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出图像:

如果黑色矩形的位置(您感兴趣的区域)不在固定位置,那么您可能需要检查另一种方法:使用矩形检测技术:

在上面的输出中,您感兴趣的区域将是图像中的第二大矩形.
在一个侧面说明,如果您打算在以后的文字隔离开来,简单的简历::侵蚀() ,所以你只剩下可以去除图像中所有的噪声白盒和文字.另一种消除噪音的技巧是使用cv::medianBlur().你也可以探索cv::morphologyEx()这个技巧:
cv::Mat kernel = cv::getStructuringElement(cv::MORPH_ELLIPSE, cv::Size(7, 7), cv::Point(3, 3));
cv::morphologyEx(src, src, cv::MORPH_ELLIPSE, kernel);
Run Code Online (Sandbox Code Playgroud)
一个合适的解决方案甚至可能是这些的组合3.我已经在X射线图像的Extract手骨上展示了一点.