2013-04-01 157 views
2

我想从现有图像中裁剪出图像。我已经拍摄的图像和使用ImageMagick上施加单色与阈98%从现有图像中裁剪图像

所得图像是这样的(是这是可行的在OpenCV中):

enter image description here

立即从该图像我想裁剪出另一个图像,使最终的图像看起来是这样的:

enter image description here

问题 我该如何在OpenCV中做到这一点?请注意,我想裁剪图像的唯一原因是我可以使用this answer来获取文字的一部分。如果不需要剪出一张新图像,而是专注于图像的黑色部分,那就太棒了。

+0

看来你正在尝试调整图像而不是裁剪它,这是正确的吗? –

+0

@perfanoff birdy想要裁剪它。堆栈溢出正在调整图像大小。 [前](http://i.stack.imgur.com/MKcXt.png)。 [后](http://i.stack.imgur.com/hMTnv.png)。 –

+0

@perfanoff是正确的。谢谢澄清。我没有试图调整图像大小。 – birdy

回答

5

如果在顶部和底部的文字是要crop out,,如果他们总是在同一位置区域的解决方案很简单:刚刚成立,无视这些领域一个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; 
} 

输出图像:

如果黑色矩形的位置,这是你的区域的利息,不存在一个固定的位置,那么你可能想看看另一种方法:使用rectangle detection technique

在上面的输出,你有兴趣将第二largest rectangle在该地区图片。所以你只剩下白盒&文本

在一个侧面说明,如果你打算到文本后隔离,一个简单的cv::erode()可以去除图像中的所有声音。去除噪声另一种方法是使用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);  

一个妥善的解决方案甚至可能是这3个的组合,我证明了那一点上Extract hand bones from X-ray image

+0

标题将始终围绕相同的位置。这意味着它始终位于图像的顶部。我如何设置忽略顶部的投资回报率?我是新来opencv ...有没有一个示例程序,显示忽略了一些基于颜色的图像投资回报率... – birdy

+0

好的谢谢。我试过'morphologyEx'技术,并得到这个图像:http://imageshack.us/a/img16/5506/screenshot20130401at203.png现在我想我需要找出大矩形开始的坐标... – birdy

+0

矩形检测技术正是我所需要的,因为矩形的位置并不总是相同的。我会用这个答案来提出一个解决方案。谢谢 – birdy

0

一个简单的解决方案:从上到下,从下到上,左右和左右扫描线。当线条中暗像素的数量超过线条总像素的50%时终止。这将为您提供xmin,xmax,ymin,ymax坐标来限制您的裁剪矩形。