久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

OpenCv 2.3 C - 如何隔離圖像內(nèi)的對(duì)象

OpenCv 2.3 C - How to isolate object inside image(OpenCv 2.3 C - 如何隔離圖像內(nèi)的對(duì)象)
本文介紹了OpenCv 2.3 C - 如何隔離圖像內(nèi)的對(duì)象的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我有一個(gè)像:

我想刪除數(shù)字周圍的黑色行和列.所以我希望結(jié)果是:

i want to remove the black rows and cols round the number. So i want that the result is:

我試試這個(gè):

void findX(IplImage* imgSrc,int* min, int* max){
    int i;
    int minFound=0;
    CvMat data;
    CvScalar maxVal=cvRealScalar(imgSrc->width * 255);
    CvScalar val=cvRealScalar(0);
    //For each col sum, if sum < width*255 then we find the min
    //then continue to end to search the max, if sum< width*255 then is new max
    for (i=0; i< imgSrc->width; i++){
        cvGetCol(imgSrc, &data, i);
        val= cvSum(&data);
        if(val.val[0] < maxVal.val[0]){
            *max= i;
            if(!minFound){
                *min= i;
                minFound= 1;
            }
        }
    }
}

void findY(IplImage* imgSrc,int* min, int* max){
    int i;
    int minFound=0;
    CvMat data;
    CvScalar maxVal=cvRealScalar(imgSrc->width * 255);
    CvScalar val=cvRealScalar(0);
    //For each col sum, if sum < width*255 then we find the min
    //then continue to end to search the max, if sum< width*255 then is new max
    for (i=0; i< imgSrc->height; i++){
        cvGetRow(imgSrc, &data, i);
        val= cvSum(&data);
        if(val.val[0] < maxVal.val[0]){
            *max=i;
            if(!minFound){
                *min= i;
                minFound= 1;
            }
        }
    }
}
CvRect findBB(IplImage* imgSrc){
    CvRect aux;
    int xmin, xmax, ymin, ymax;
    xmin=xmax=ymin=ymax=0;

    findX(imgSrc, &xmin, &xmax);
    findY(imgSrc, &ymin, &ymax);

    aux=cvRect(xmin, ymin, xmax-xmin, ymax-ymin);

    //printf("BB: %d,%d - %d,%d
", aux.x, aux.y, aux.width, aux.height);

    return aux;

}

所以我使用:

IplImage *my_image = cvLoad....
CvRect bb = findBB(my_image);
IplImage *new_image = cvCreateImage(cvSize(bb.width,bb.height), my_image->depth, 1);
cvShowImage("test",new_image);

效果不佳,因?yàn)槲覈L試檢查新圖像中是否存在黑色行或列.我能做什么?有人能幫我嗎?(對(duì)不起我的英語!)

it doesn't work good, cause i try to check if in new image there are black rows or cols and they are present. what can i do? can someone help me? (sorry for my english!)

推薦答案

一種方法是簡單地執(zhí)行 邊界框技術(shù)檢測數(shù)字,如下圖所示:

One way to do it is to simply execute the bounding box technique to detect the digit, as illustrated by the image below:

由于您的圖像已經(jīng)過處理,因此我使用的邊界框技術(shù)要簡單得多.

Since your image is already processed the bounding box technique I use is a lot simpler.

在該過程之后,您真正需要做的就是將原始圖像的 ROI(感興趣區(qū)域)設(shè)置為框定義的區(qū)域,以實(shí)現(xiàn) 裁剪 效果并隔離對(duì)象:

After that procedure, all you really need to do is set the ROI (Region of Interest) of the original image to the area defined by the box to achieve the crop effect and isolate the object:

請(qǐng)注意,在生成的圖像中,邊框中有一個(gè)額外的非白色行/列像素.好吧,他們也不是黑人.那是因?yàn)槲覜]有執(zhí)行任何閾值方法將圖像二值化為黑白.下面的代碼演示了在圖像的灰度版本上執(zhí)行的邊界框技術(shù).

Notice that in the resulting image there is one extra row/column of pixels in the border that are not white. Well, they are not black either. That's because I didn't performed any threshold method to binarize the image to black and white. The code below demonstrates the bounding box technique being executed on a grayscale version of the image.

這幾乎是實(shí)現(xiàn)您想要的目標(biāo)的路線圖.出于教育目的,我將分享我使用 OpenCV 的 C++ 接口編寫的代碼.我相信你有能力將它轉(zhuǎn)換成 C 接口.

This is pretty much the roadmap to achieve what you want. For educational purposes I'm sharing the code I wrote using the C++ interface of OpenCV. I'm sure you are capable of converting it to the C interface.

#include <cv.h>
#include <highgui.h>

#include <vector>


int main(int argc, char* argv[])
{
    cv::Mat img = cv::imread(argv[1]);

    // Convert RGB Mat to GRAY
    cv::Mat gray;
    cv::cvtColor(img, gray, CV_BGR2GRAY);

    // Store the set of points in the image before assembling the bounding box
    std::vector<cv::Point> points;
    cv::Mat_<uchar>::iterator it = gray.begin<uchar>();
    cv::Mat_<uchar>::iterator end = gray.end<uchar>();
    for (; it != end; ++it)
    {
        if (*it) points.push_back(it.pos());
    }

    // Compute minimal bounding box
    cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));

// Draw bounding box in the original image (debug purposes)
//cv::Point2f vertices[4];
//box.points(vertices);
//for (int i = 0; i < 4; ++i)
//{
        //cv::line(img, vertices[i], vertices[(i + 1) % 4], cv::Scalar(0, 255, 0), 1, CV_AA);
/
                
【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Assertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(斷言失敗(size.width0 amp;amp; size.height0))
Rotate an image in C++ without using OpenCV functions(在 C++ 中旋轉(zhuǎn)圖像而不使用 OpenCV 函數(shù))
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開 avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無法設(shè)置 SVM 參數(shù))
Convert a single color with cvtColor(使用 cvtColor 轉(zhuǎn)換單一顏色)
主站蜘蛛池模板: 亚洲福利专区 | 亚洲在线免费视频 | 日日干日日 | 大香伊人网 | 日b免费视频 | 日日操日日射 | 国产成人免费视频 | 丁香婷婷激情 | 天天干天天操天天干 | 国产三级在线 | 黄色片视频 | 日韩a在线观看 | 日韩理论在线 | 欧美激情久久久 | 神马久久影院 | 精品一区二区在线视频 | 日韩欧美色 | 国产成人a亚洲精品 | 五月天在线观看 | 欧美日韩国产精品 | 女人av在线 | 毛片一级片 | 午夜av片| 国产欧美日韩视频 | 亚洲激情五月 | 国产综合第一页 | 在线观看91视频 | 亚欧洲精品在线视频免费观看 | av片在线观看 | 69久久久 | 黄色在线观看网址 | 秋霞av在线| 九九热在线精品视频 | 中文字幕免费观看视频 | 综合色在线 | a视频在线| 精品视频国产 | av在线播放网站 | 国产福利91精品一区二区三区 | 日本美女黄色 | 久久夜色精品国产欧美乱极品 |