1

OpenCVに関しては、私はやや初心者です。マットをよりよく理解するために、何日も Google の検索結果をふるいにかけましたが、役に立ちませんでした。まとまりのないとりとめのないことを言う代わりに、私は自分が何をしようとしているのかを言います。基本的に、特定の画像ブロックを参照する方法としてのみ、画像の上にテーブルを作成したいと考えています。次に、各セルの強度勾配を計算したいと思います。つまり、「よし、C3の強度勾配は?」と言えるようになりたい。Excelスプレッドシートのように機能しないことはわかっていますが、これを行う最善の方法は何ですか?

これが私がこれまでに持っているものです。私は明らかにヒストグラムを始めていませんが、これはいくつかの助けになるかもしれません.

洞察をお寄せいただきありがとうございます。

using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
//  Load and convert image to grayscale.
    Mat src;
    src = imread("/Users/Mikie/Documents/Xcode/Image Modify/images/HDimage.jpg", CV_LOAD_IMAGE_GRAYSCALE);
//  Initialize variables to store source size data.
    float h, w, nh;
    h = src.rows;
    w = src.cols;
    nh = (h/w)*640; // Maintain aspect ratio based on a desired width.

//  Ensure image loaded.
    if(src.empty()){
        printf(" No image data \n ");
        return -1;
    }
    // if(argc != 2 || !image.data)
    // {
    //    printf(" No image data \n ");
    //  return -1;
    // }

//  Create destination Mat.
    Mat dst(4, 4, CV_8UC1);

    resize(src, dst, Size(640, nh), CV_INTER_LINEAR); // Resize source while maintaing aspect ratio.
    //  Show results to verify size change. 
    imwrite("/Users/Mikie/Documents/Xcode/Image Modify/images/images/Gray_Image.jpg", dst);
    namedWindow("Gray image", CV_WINDOW_AUTOSIZE);
    imshow("Gray image", dst);
    waitKey(0);
    return 0;
}
4

1 に答える 1

0

mat 要素に直接アクセスできます。

//Create a matrix (filled with 0's) to hold the data
cv::Mat gradient = cv::Mat::zeros(originalImage.size(),CV_32F);

//Acces a certain element of the matrix
std::cout << gradient.at<float>(100,100) <<std::endl;

OpenCV には、行列の ROI (関心領域) を定義するオプションも用意されています。これは、セルの分解に役立つ場合があります。

cv::Rect roi(originalImage.size().width * 0.5, originalImage.size().height, cellWidth, callHeight); 

この詳細な例は、次の Q&A に記載されています: OpenCV で ROI を使用していますか?

最後に、opencv が優れたチュートリアルを提供する Sobel Derivatives を使用して勾配を計算できます。

于 2013-07-01T08:22:38.277 に答える