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= smallestWidth] { mPreviewSize = previewSize; } } mCamera.set[Highgui.CV_CAP_PROP_FRAME_WIDTH, mPreviewSize.width]; mCamera.set[Highgui.CV_CAP_PROP_FRAME_HEIGHT, mPreviewSize.height]; }

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.

while [mDoProcess && mCamera != null] {
    boolean grabbed = mCamera.grab[];
    if [grabbed] {
        mCamera.retrieve[mCurrentFrame,
Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGB];
        // Process mCurrentFrame…
    }
}

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ả.

RGB là không gian màu rất phổ biến được dùng trong đồ họa máy tính và nhiều thiết bị kĩ thuật số khác. Ý tưởng chính của không gian màu này là sự kết hợp của 3 màu sắc cơ bản : màu đỏ [R, Red], xanh lục [G, Green] và xanh lơ [B, Blue] để mô tả tất cả các màu sắc khác.
Nếu như một ảnh số được mã hóa bằng 24bit, nghĩa là 8bit cho kênh R, 8bit cho kênh G, 8bit cho kênh B, thì mỗ kênh này màu này sẽ nhận giá trị từ 0-255. Với mỗi giá trị khác nhau của các kênh màu kết hợp với nhau ta sẽ được một màu khác nhau, như vậy ta sẽ có tổng cộng 255x255x255 = 1.66 triệu màu sắc.

Ví dụ: màu đen là sự kết hợp của các kênh màu [R, G, B] với giá trị tương ứng [0, 0, 0] màu trắng có giá trị [255, 255, 255], màu vàng có giá trị [255, 255, 0], màu tím đậm có giá trị [64, 0, 128] ...Nếu ta dùng 16bit để mã hóa một kênh màu [48bit cho toàn bộ 3 kênh màu] thì dãi màu sẽ trãi rộng lên tới 3*2^16 = ... Một con số rất lớn.
0

Là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.

Chủ Đề