Lập trình xử lý ảnh trong c
Cảm ơn bạn vì bài viết chi tiết và tỉ mỉ này, mình đang làm 1 đề tài có liên quan đến xử lý ảnh nhưng lại kém về C# nên bạn có thể cho mình code đầy đủ của mấy bước xửa lý ảnh kia dc k....Cảm ơn rất nhiều.....^^ (C', M', Y') = ((255 - R), (255 - G), (255 - B)). Việc tính giá trị của K lại là một vấn đề khác vì nó liên quan tới nhà sản xuất công nghệ in, tuy nhiên về mặt lý thuyết có thể chấp nhận rằng K = min {C'/2,55, M'/2,55, Y'/2,55} , như vậy 0<= K <=100. Nếu K = 100, thì C = M = Y =0 (trương hợp in màu đen) Nếu 0< K < 100: C = (C'/2.55 - K) * 100 /(100 - K), M = (M'/2.55 - K) * 100 /(100 - K), Y = (Y'/2.55 - K) *100 /(100 - K) và K = K. Trong đó, C, M, Y, K được làm tròn tới để lấy chỉ số nguyên. Chuyển đổi RGB sang HSV và ngược lại Giả sử ta có một điểm màu có giá trị trong hệ RGB là (R, G, B). ta chuyển sang không gian HSV như sau: Đặt M = Max(R, G, B), m = Min(R, G, B) và C = M - m. Nếu M = R, H' = (G - B)/C mod 6. Nếu M = G, H' = (B - R)/C + 2. Nếu M = B, H' = (R - G)/C + 4. Và H = H'x60. Trong trường hợp C = 0, H = 00 V = M. S = C/V. Trong trường hợp V hoặc C bằng 0, S = 0. Để chuyển từ HSV sang RGB ta làm như sau: Giả sử ta có không gian màu HSV với H = [0, 360], S = [0, 1], V = [0, 1]. Khi đó, ta tính C = VxS. H' = H/60. X = C(1 - |H' mod2 -1|). Ta biểu diễn hệ (R1, G1, B1) như sau: ( 1, 1, 1) ={
} Chương trình chuyển đổi các không gian màu
không gian màu RGB …
Sử dụng Open CV trong android: Trong ví dụ đầu tiên này, chúng tôi sẽ dựa vào các khung xem trước từ các máy ảnh từ khi chúng tôi có thể lấy lại những hình ảnh tương đối nhanh. Chúng tôi cần phải chọn một kích thước thích hợp cho các khung xem trước, như khung quá nhỏ sẽ dẫn đến một kết quả xấu khi chúng ta làm việc xử lý, và khung hình quá lớn sẽ làm chậm tất cả mọi thứ đến một mức độ không thể chấp nhận. Kể từ khi máy ảnh điện thoại thông minh thường có một bộ khác nhau của kích thước được hỗ trợ cho các khung xem trước, chúng ta cần phải chọn một kích thước tối thiểu chấp nhận và đi qua tất cả để tìm ra điều đúng. OpenCV có API Java của riêng mình, và không dựa trên dựa trên Java Máy ảnh API Android. Các mã sau mở máy ảnh và thiết lập kích thước xem trước mức chấp nhận được.
Một điều quan trọng cần nhớ khi làm việc với OpenCV là chúng ta cần rất nhiều RAM cho những hình ảnh chúng tôi đang xử lý. OpenCV sử dụng ma trận để đại diện cho tất cả các hình ảnh như vậy để được như hiệu quả nhất có thể, chúng tôi sẽ phân bổ các ma trận cần một lần và tái sử dụng chúng cho mỗi khung hình. Một khi chúng ta có các thiết lập máy ảnh và các ma trận phân bổ, chúng ta có thể bắt đầu để lấy khung preview để xử lý. Các mã sau đây cho thấy cách chúng ta làm điều này với OpenCV.
Bây giờ chúng ta có một khung xem trước trong mCurrentFrame rằng chúng ta có thể sử dụng để chế biến. Trong trường hợp này, chúng ta sẽ sử dụng chức năng inRange để tạo ra một mặt nạ mà chỉ bao gồm một khoảng màu cụ thể. Để có kết quả tốt nhất, đầu tiên chúng ta sẽ chuyển đổi các khung nắm lấy để HSV-format. Khi chúng tôi có mặt nạ, chúng tôi rút ra những khung ban đầu vào một ma trận mới bằng cách sử dụng mặt nạ, chúng tôi nhận được từ các inRange chức năng. Các mã sau đây cho thấy làm thế nào để chuyển đổi định dạng từ RGB sang HSV, tạo mặt nạ màu và vẽ kết quả. 0Làm thế nào để hiển thị các kết quả của hình ảnh được xử lý kết quả Bitmap bây giờ có thể được sử dụng để vẽ một SurfaceView hoặc tương tự để hiển thị kết quả. Cách dễ nhất để làm điều này là để chuyển đổi ma trận OpenCV đến một đối tượng Bitmap Android. Có một lớp học Util cung cấp một chức năng cho việc này. |