cuốn sách gpt4 ai đã làm

OpenCV : What is the real performance difference between continuous and non-continuous matrices?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 21:58:34 26 4
mua khóa gpt4 Nike

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?

câu trả lời hay nhất

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;
}

Về OpenCV: Sự khác biệt hiệu suất thực sự giữa ma trận liên tục và không liên tục là gì?, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18849357/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress