2013-04-01 201 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座標來限制您的裁剪矩形。