Cho hình ảnh .png
với nền trong suốt, tôi muốn tìm hộp giới hạn của dữ liệu không trong suốt. Sử dụng vòng lặp for
lồng nhau với QImage.pixel()
rất chậm. Có một phương pháp được xây dựng trong thực hiện điều này trong Qt?Qt có cách tìm hộp giới hạn của hình ảnh không?
Trả lời
Nếu pixel() là quá chậm đối với bạn, hãy xem xét hơn hiệu quả dữ liệu hàng khôn ngoan, được cung cấp một QImage p:
int l =p.width(), r = 0, t = p.height(), b = 0;
for (int y = 0; y < p.height(); ++y) {
QRgb *row = (QRgb*)p.scanLine(y);
bool rowFilled = false;
for (int x = 0; x < p.width(); ++x) {
if (qAlpha(row[x])) {
rowFilled = true;
r = std::max(r, x);
if (l > x) {
l = x;
x = r; // shortcut to only search for new right bound from here
}
}
}
if (rowFilled) {
t = std::min(t, y);
b = y;
}
}
Tôi nghi ngờ nó sẽ nhanh hơn thế này.
Có một tùy chọn liên quan đến việc sử dụng số QGraphicsPixmapItem
và truy vấn hộp giới hạn của khu vực mờ đục (QGraphicsPixmapItem::opaqueArea().boundingRect()
). Không chắc chắn nếu nó là cách tốt nhất nhưng nó hoạt động :) Nó có thể là giá trị đào vào mã nguồn của Qt để xem mã nào là trái tim của nó.
Các mã sau đây sẽ in ra chiều rộng và chiều cao của hình ảnh tiếp theo là chiều rộng và chiều cao của phần mờ đục của hình ảnh:
QPixmap p("image.png");
QGraphicsPixmapItem *item = new QGraphicsPixmapItem(p);
std::cout << item->boundingRect().width() << "," << item->boundingRect().height() << std::endl;
std::cout << item->opaqueArea().boundingRect().width() << "," << item->opaqueArea().boundingRect().height() << std::endl;
opaqueArea() xây dựng toàn bộ Đường dẫn mô tả khu vực. Điều đó sẽ chậm hơn so với tính toán hình chữ nhật bounding đơn giản. – ypnos
Hy vọng rằng OP có thể đăng một số kết quả định thời gian. Tôi muốn được quan tâm để xem có bao nhiêu thời gian cả hai lựa chọn mất. Nhưng có, đối với những hình ảnh phức tạp, tôi chỉ có thể tưởng tượng nó chậm hơn. –
Tôi đã thực hiện một số thời gian khắc nghiệt của tác vụ trên tất cả của mình mà không cần tạo điểm chuẩn vi mô. Cách tiếp cận này sử dụng cơ bản cùng một lượng thời gian đồng hồ treo tường như các vòng lặp lồng nhau của tôi, nhưng tốn ít thời gian cpu hơn. – retracile
- 1. OpenCV - tìm hộp giới hạn của các đốm màu lớn nhất trong hình ảnh nhị phân
- 2. Nhận hộp giới hạn của thành phố
- 3. Hộp giới hạn 2D của một ngành?
- 4. Cách tính toán hộp giới hạn của chuỗi CATextLayer?
- 5. Hộp giới hạn cho đa giác
- 6. Giới hạn độ cao của máy ảnh
- 7. Có cách nào để lấy hộp giới hạn (tính bằng pixel) của phần tử DOM không?
- 8. Có dịch vụ API tìm kiếm ảnh nghệ thuật album không giới hạn miễn phí không?
- 9. Hộp giới hạn trong D3.js
- 10. cách giới hạn thanh tìm kiếm
- 11. Thoát khỏi các giới hạn của một hộp chứa div
- 12. Tìm hộp giới hạn định hướng của một Convex Hull trong XNA Sử dụng Calipers quay
- 13. Tìm giới hạn đàn hồi
- 14. Bing tìm kiếm hình ảnh phân trang - vô hạn cuộn
- 15. Hộp giới hạn hình chữ nhật xung quanh các đốm màu trong ảnh đơn sắc bằng cách sử dụng python
- 16. CABasicAnimation lặp lại không giới hạn mà không có HUGE_VALF?
- 17. Hộp giới hạn chặt chẽ xung quanh PDF của hình MATLAB
- 18. Số lượng hộp kiểm giới hạn
- 19. Cách tính toán hộp giới hạn địa lý trong iOS?
- 20. thay đổi giới hạn tài sản của UIView không ảnh hưởng đến nội dung của nó
- 21. Giới hạn của Firefox Worker có tồn tại không?
- 22. chỉ đặt giới hạn dưới của giới hạn cho ggplot
- 23. Bất kỳ cách nào để có được một hộp giới hạn từ một Object3D ba.js?
- 24. Qt: tạo "nút hình ảnh svg"
- 25. Giới hạn độ phân giải của WebRTC
- 26. Giới hạn chiều rộng hình ảnh trên hình ảnh hướng dọc/giữ nguyên tỷ lệ khung hình
- 27. Giới hạn của API Wikipedia
- 28. Thay đổi kích thước hình ảnh để vừa với khung giới hạn
- 29. Qt QTableView cách chỉ có một cột hộp kiểm
- 30. php có bị giới hạn không?
+1: Tốt. Tôi vừa xem xét tùy chọn scanLine(). –
Không giống như các tài liệu Qt đang quảng cáo tốt. Đã cho tôi nửa năm để tìm hiểu về nó. – ypnos
Tôi đã làm một vài thời gian thô của nhiệm vụ trên tất cả của tôi mà không tạo ra một tiêu chuẩn vi mô. Cách tiếp cận này sử dụng cơ bản cùng một lượng thời gian cpu như giải pháp của Arnold, nhưng giảm thời gian đồng hồ treo tường. – retracile