ম্যাট্রিক্স ওপেনসিভি এর আকার


128

আমি জানি এটি খুব প্রাথমিক হতে পারে তবে আমি ওপেনসিভিতে নতুন। আপনি কী আমাকে ওপেনসিভিতে ম্যাট্রিক্সের আকার পেতে যায় তা বলতে পারেন? আমি গুগল করেছিলাম এবং আমি এখনও অনুসন্ধান করছি, তবে যদি আপনার উত্তরটি কেউ জানেন তবে দয়া করে আমাকে সহায়তা করুন।

সারি এবং কলামগুলির সংখ্যা হিসাবে আকার।

এবং 2 ডি ম্যাট্রিক্সের সর্বাধিক মান প্রত্যক্ষ করার জন্য কি কোনও উপায় আছে?

উত্তর:


239
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;

cv::Size s = mat.size();
rows = s.height;
cols = s.width;

এছাড়াও লক্ষ করুন যে স্ট্রাইড> = কলস; এর অর্থ হ'ল সারির প্রকৃত আকারটি উপাদান আকারের x কোলসের চেয়ে বেশি হতে পারে। এটি অবিচ্ছিন্ন মাদুর ইস্যু থেকে আলাদা এবং ডেটা প্রান্তিককরণের সাথে সম্পর্কিত।


10
ডকুমেন্টেশন লিঙ্ক: docs.opencv.org/modules/core/doc/basic_structures.html#mat-size
Rasim

1
এই দুটি সঠিক সমতুল্য?
কাকাহুয়েত ফ্রিটো

19

নোট করুন যে সারি এবং কলামগুলি বাদে বেশ কয়েকটি চ্যানেল এবং প্রকার রয়েছে। কী ধরণের তা স্পষ্ট হয়ে গেলে, চ্যানেলগুলি CV_8UC3 এর মতো অতিরিক্ত মাত্রা হিসাবে কাজ করতে পারে যাতে আপনি ম্যাট্রিক্স হিসাবে সম্বোধন করবেন

uchar a = M.at<Vec3b>(y, x)[i];

সুতরাং প্রাথমিক ধরণের উপাদানগুলির আকারের আকার হ'ল এমরোজ * এমকোলোস * এম সিএনএন

সর্বাধিক উপাদানটি ব্যবহার করতে পারেন find

Mat src;
double minVal, maxVal;
minMaxLoc(src, &minVal, &maxVal);

এটিই কেবলমাত্র একটি উত্তর যা একটি ওপেনসিভি মাদুর সর্বাধিক উপাদান খুঁজে বের করতেও সম্বোধন করে।
রায়রেং

12

2 ডি ম্যাট্রিক্সের জন্য:

mat.rows - 2D অ্যারেতে সারিগুলির সংখ্যা।

ম্যাটকোলস - 2D অ্যারেতে কলামগুলির সংখ্যা।

বা: সি ++: সাইজ মাদুর :: আকার () কনস্ট

পদ্ধতিটি একটি ম্যাট্রিক্স আকার দেয়: আকার (কলস, সারি)। যখন ম্যাট্রিক্স 2-মাত্রিকের বেশি হয়, তখন প্রত্যাবর্তিত আকার (-1, -1) হয়।

বহুমাত্রিক ম্যাট্রিক্সের জন্য আপনাকে ব্যবহার করা দরকার

int thisSizes[3] = {2, 3, 4};
cv::Mat mat3D(3, thisSizes, CV_32FC1);
// mat3D.size tells the size of the matrix 
// mat3D.size[0] = 2;
// mat3D.size[1] = 3;
// mat3D.size[2] = 4;

দ্রষ্টব্য, এখানে z অক্ষের জন্য 2, y অক্ষের জন্য 3, এক্স অক্ষের জন্য 4। এক্স, ওয়াই, জেড দ্বারা, এর অর্থ হল মাত্রার ক্রম। এক্স সূচক দ্রুত পরিবর্তন করে।


1
কেবল স্পষ্ট করে বলতে গেলে, কোনও Mat::size()সদস্য পদ্ধতি নেই, বরং Mat::sizeসদস্যের পরিবর্তনশীল প্রকারের MatSize। পরেরটি MatSize::operator()কোনও Sizeবস্তুকে ফেরত দেওয়ার জন্য প্রথম বন্ধনী অপারেটরটি ওভারলোড করে
আম্রো

4

একটি সম্পূর্ণ সি ++ কোড উদাহরণ, নতুনদের জন্য সহায়ক হতে পারে

#include <iostream>
#include <string>
#include "opencv/highgui.h"

using namespace std;
using namespace cv;

int main()
{
    cv:Mat M(102,201,CV_8UC1);
    int rows = M.rows;
    int cols = M.cols;

    cout<<rows<<" "<<cols<<endl;

    cv::Size sz = M.size();
    rows = sz.height;
    cols = sz.width;

    cout<<rows<<" "<<cols<<endl;
    cout<<sz<<endl;
    return 0;
}

1
সিপিপিতে আমরা কীভাবে ম্যাট্রিক্সের গভীরতা পেতে পারি?
সাই

1

যদি আপনি পাইথন মোড়ক ব্যবহার করেন তবে (আপনার ম্যাট্রিক্সের নামটি মাদুর হিসাবে ধরে নিচ্ছেন ):

  • মাদুর আকার আপনাকে প্রকারের একটি অ্যারে দেয়- [উচ্চতা, প্রস্থ, চ্যানেল]

  • mat.size আপনাকে অ্যারের আকার দেয়

কোডের উদাহরণ:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.