Hiện tại tôi đang cố gắng tìm hiểu một số khác biệt giữa ma trận liên tục và không liên tục trong openCV. Tôi được gợi ý rằng ma trận liên tục mang lại hiệu suất tốt hơn vì chương trình không phải quay lại đầu hàng tiếp theo ở cuối mỗi cột.
Nói tóm lại, sự khác biệt về hiệu suất có thể so sánh giữa ma trận liên tục và không liên tục là bao nhiêu?
Chà, điều đó chủ yếu phụ thuộc vào cách bạn định sử dụng ma trận. Dù sao thì, nếu bạn đang thực hiện nhiều lần "nhảy" - điều đó sẽ không tạo ra nhiều khác biệt, nhưng trong các trường hợp sử dụng "liên tục", nó sẽ ảnh hưởng đến vài chục phần trăm.
Ví dụ sau (chỉ đơn giản là dịch chuyển các giá trị ma trận) sẽ cho kết quả:
image.isContinuous() = 1
roi.isContinuous() = 0
hình ảnh: 0,0162504 giây
roi: 0,0219723 s
Kiểm tra vệ sinh: OK
Có sự khác biệt khoảng 30%. Số dặm của bạn sẽ thay đổi tùy theo phần cứng và trường hợp sử dụng thực tế.
Nguồn (lưu ý cách vòng lặp đầu tiên đơn giản hơn nhiều trong trường hợp đó):
#include
#include
sử dụng không gian tên cv;
using namespace std;
int main( int argc, char** argv )
{
int cols = 4096;
int hàng = 4096;
tỷ lệ int = 2;
Hình ảnh Mat(hàng, cols, CV_8UC1);
Mat image_big(hàng * tỷ lệ, cols * tỷ lệ, CV_8UC1);
Mat roi = image_big(Rect(0, 0, cols, row));
randu(hình ảnh, 0, 255);
image.copyTo(roi);
cout << "image.isContinuous() = " << image.isContinuous() << "\n" << "roi.isContinuous() = " << roi.isContinuous() << endl;
{
cout << "hình ảnh: ";
bắt đầu kép = getTickCount();
for (int i = 1; i < image.total(); i++)
{
image.data[i - 1] = image.data[i];
}
cout << (getTickCount() - bắt đầu)/getTickFrequency() << " s" << endl;
}
{
cout << "roi: ";
bắt đầu kép = getTickCount();
for (int y = 0; y < roi.cols; y++)
{
nếu (y != 0) {
roi.ptr(y-1)[roi.cols-1] = roi.ptr(y)[0];
}
for (int x = 1; x < roi.rows; x++)
{
roi.ptr(y)[x - 1] = roi.ptr(y)[x];
}
}
cout << (getTickCount() - bắt đầu)/getTickFrequency() << " s" << endl;
}
cout << "Kiểm tra độ tỉnh táo: " << (countNonZero(image - roi) ? "FAIL" : "OK") << endl;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!