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

opencv - Có chức năng tích hợp nào để chia miếng đệm 3 kênh thành ba miếng đệm 3 kênh thay vì thành ba miếng đệm 1 kênh không?

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

Theo như tôi biết, tích hợp sẵn tách ra sẽ chuyển đổi 3 kênh Thảm Chia thành ba kênh 1 Thảm. Kết quả là ba người này Thảm Chỉ là thang độ xám với một số cường độ khác nhau.

Ý định của tôi là có được ba kênh 3 Thảm, như hình dưới đây.

void SplitTo8UC3(const Mat& đầu vào, vector& đầu ra)
{
Mat blue = input.clone();
Màu xanh lá cây = input.clone();
Mat đỏ = input.clone();
const uint N = input.rows * input.step;

vì (uint i = 0; i < N; i += 3)
{
// blue.data[i]
green.data[i] = 0;
red.data[i] = 0;


blue.data[i + 1] = 0;
//green.data[i+1]
red.data[i + 1] = 0;


blue.data[i + 2] = 0;
green.data[i + 2] = 0;
//red.data[i+2]
}

đầu ra.push_back (màu xanh);
đầu ra.push_back (màu xanh lá cây);
đầu ra.push_back (màu đỏ);
}

Nó hoạt động, nhưng thay vì phát minh lại bánh xe, tôi đang tìm kiếm một cái tích hợp sẵn nếu có.

biên tập

Giải pháp được đề xuất phải nhanh hơn của tôi.

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

biên tập:Tôi đã kết hợp các đề xuất cải tiến của Dan từ nhận xét của anh ấy.


Tôi không thể nghĩ ra chức năng tích hợp nào để thực hiện việc này và tôi cũng không thể tìm thấy chức năng nào. Nhưng trong khi thực hiện một số nghiên cứu, tôi tình cờ thấy kênh trộnchức năng, có thể cải thiện giải pháp của bạn. Ít nhất, nó tránh được việc thực hiện một vòng lặp.

Dưới đây là những sửa đổi tôi đã thực hiện đối với mã của bạn:

void SplitTo8UC3(const cv::Mat& đầu vào, std::vector& đầu ra)
{
// Phân bổ đầu ra
cv::Mat b(cv::Mat::zeros(input.size(), input.type()));
cv::Mat g(cv::Mat::zeros(input.size(), input.type()));
cv::Mat r(cv::Mat::zeros(input.size(), input.type()));

// Thu thập kết quả đầu ra
cv::Mat out[] = { b, g, r };

// Thiết lập cặp chỉ mục
int from_to[] = { 0,0, 1,4, 2,8 };

cv::mixChannels(&input, 1, out, 3, from_to, 3);
out.sign(std::begin(out), std::end(out));
}

Hãy có hình ảnh thử nghiệm nàymàu sắc.png:

Sau đó, hãy có mã kiểm tra này:

    cv::Mat img = cv::imread("images/colors.png");

std::vector bgr;

chiaTo8UC3(img, bgr);

cv::imwrite("images/b.png", bgr[0]);
cv::imwrite("images/g.png", bgr[1]);
cv::imwrite("images/r.png", bgr[2]);

Sau đó, chúng tôi nhận được đầu ra sau b.png,g.pngr.png, hy vọng đây là những giải pháp ban đầu dành cho bạn:

希望对您有所帮助!

Về opencv - có chức năng tích hợp để chia miếng đệm 3 kênh thành ba miếng đệm 3 kênh thay vì thành ba miếng đệm 1 kênh không? , 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/56473838/

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