2011-01-26 6 views
7

Tôi cần phát triển ứng dụng dành cho máy tính để bàn sẽTìm biểu tượng trong ảnh chụp màn hình máy tính để bàn

1.) có danh sách Biểu trưng ứng dụng khác nhau (Nền trong suốt), ví dụ: IE, FIREFOX, CHROME, PHOTOSHOP ETC.

2.) Người dùng sẽ chụp màn hình máy tính để bàn và lưu hình ảnh.

3.) Bây giờ ứng dụng của tôi cần phải tìm kiếm tất cả các biểu trưng trong hình ảnh chụp màn hình và cho biết tất cả các biểu trưng đều có mặt và ở đâu.

4.) Tôi đã sử dụng OPENCV, nó hoạt động, nhưng khi người dùng thay đổi nền màn hình & chụp màn hình, nó không hoạt động như khu vực trong suốt của biểu tượng đang tải nội dung nền.

Ai đó có thể cung cấp giải pháp hoặc thư viện nguồn mở, thương mại để thực hiện công việc này.

+2

Nếu bạn đang cố gắng tìm tất cả các chương trình đang chạy, tìm biểu trưng trong ảnh chụp màn hình có thể không phải là cách tốt nhất ... – SWeko

+0

Yêu cầu không tìm thấy tất cả các chương trình đang chạy, thay vào đó tìm biểu tượng ứng dụng x có mặt trên máy tính để bàn hay không, nếu có ở vị trí nào. – Hoshin

Trả lời

8

Điều này dễ thực hiện khi sử dụng tương quan chéo.

Xem câu trả lời của tôi cho this question.

Về cơ bản:

  • Bắt đầu với hình ảnh máy tính để bàn và một mẫu hình ảnh cho mỗi biểu tượng
  • Áp dụng phát hiện cạnh (ví dụ Sobel) đến hình ảnh máy tính để bàn và hình ảnh mẫu.
  • Vứt bỏ hình ảnh máy tính để bàn độc đáo và các mẫu, bạn sẽ không cần đến chúng nữa vì chúng ta sẽ sử dụng những hình ảnh cạnh phát hiện
  • Đối với mỗi mẫu
    • Đỗ mẫu phù hợp như bình thường
    • Ngưỡng tối đa của kết quả. Nếu nó ở trên ngưỡng, bạn có một trận đấu tại vị trí đó. Nếu không, không khớp.

Nếu biểu tượng của bạn được liên kết trong một mạng lưới trên desktop, bạn có thể tăng tốc độ xử lý của bạn bằng cách chỉ kiểm tra những vị trí lưới cụ thể.

EDIT

Bạn cũng có thể tiết kiệm rất nhiều thời gian bằng cách biết mà biểu tượng để tìm kiếm. Nếu bạn có quyền truy cập vào hệ thống tệp thì chỉ cần tìm các tệp *.lnk (hoặc bất kỳ tiện ích nào khác mà bạn có thể quan tâm) trong thư mục tương ứng với máy tính để bàn (không thể nhớ chính xác nó là gì, nhưng đối với Windows7 c:\users\misha\desktop). Điều đó sẽ cho bạn biết các biểu tượng những gì có trên màn hình.Điều này sẽ cho phép bạn rút ngắn danh sách ứng cử viên mẫu của bạn trước khi bạn đi và làm mẫu phù hợp.

+0

Biểu tượng có thể rỗng trong một số khu vực (vì vậy không có cạnh nào trong khu vực đó), trong trường hợp này ảnh cạnh của hình ảnh trên máy tính (như nền đang thay đổi) sẽ chứa các cạnh phụ, cách đối sánh mẫu chuẩn sẽ đối phó với điều này . – Hoshin

+1

Nó sẽ đối phó tốt, bởi vì mẫu của bạn cũng sẽ có một phần rỗng. Hãy thử nó cho chính mình. – misha

0

Tôi không quen thuộc với các công cụ bạn đang sử dụng, nhưng tôi đoán bạn phải hoặc là:

a) Nói cho chương trình của bạn để bỏ qua điểm ảnh trong suốt trong những hình ảnh biểu tượng trong hoạt động so sánh.

HOẶC

b) Yêu cầu chương trình xử lý pixel trong suốt trong hình ảnh biểu tượng dưới dạng "ký tự đại diện" có thể là bất kỳ màu nào.

+0

Bạn nói đúng. Nhưng tôi đang tìm một số thuật toán cho mẫu nhanh phù hợp với khả năng của vùng. Nếu tôi viết bản thân mình và kiểm tra từng khối hình ảnh, nó sẽ mất quá nhiều thời gian. Opencv mất khoảng 10-20 ms để tìm một logo trong một hình ảnh desktop. – Hoshin

2

Tôi thích misha's answer và tôi nghĩ rằng nó sẽ phù hợp với bạn. Nhưng nó không hoạt động, bạn có thể thử thay thế các pixel trong suốt trong logo tham chiếu của mình với nhiễu ngẫu nhiên được phân bố đồng đều trước khi thử kết hợp. Điều này sẽ làm cho các pixel trong suốt không liên quan đến bất kỳ tính toán phù hợp nào bởi vì chúng sẽ chỉ khớp với bất kỳ thứ gì có trên màn hình trong các pixel đó.