Untitled

 avatar
unknown
plain_text
5 months ago
3.7 kB
3
Indexable
//blur
#include <jni.h>
#include <cstring>

// Hàm làm mờ ảnh YUV420
extern "C"
JNIEXPORT void JNICALL
Java_com_example_yourapp_YUVProcessor_blurYUV(JNIEnv *env, jobject thiz, jbyteArray inputYUV, 
                                              jint width, jint height, jint kernelSize) {
    int frameSize = width * height;         // Kích thước phần Y
    int uvSize = frameSize / 2;             // Kích thước phần UV

    // Lấy dữ liệu từ mảng Java
    jbyte *yuv = env->GetByteArrayElements(inputYUV, nullptr);

    // Tạo bộ nhớ tạm để lưu phần Y đã làm mờ
    unsigned char *tempY = new unsigned char[frameSize];

    // Làm mờ phần Y
    for (int y = 0; y < height; y++) {
        for (int x = 0; x < width; x++) {
            int sum = 0;
            int count = 0;

            // Kernel kích thước kernelSize x kernelSize
            for (int ky = -kernelSize / 2; ky <= kernelSize / 2; ky++) {
                for (int kx = -kernelSize / 2; kx <= kernelSize / 2; kx++) {
                    int ny = y + ky;
                    int nx = x + kx;

                    // Kiểm tra pixel nằm trong giới hạn ảnh
                    if (ny >= 0 && ny < height && nx >= 0 && nx < width) {
                        sum += yuv[ny * width + nx];
                        count++;
                    }
                }
            }

            // Gán giá trị trung bình vào pixel mới
            tempY[y * width + x] = static_cast<unsigned char>(sum / count);
        }
    }

    // Ghi lại phần Y đã làm mờ vào mảng YUV
    memcpy(yuv, tempY, frameSize);

    // Giữ nguyên phần UV
    // Không cần làm gì vì UV không thay đổi

    // Giải phóng bộ nhớ tạm
    delete[] tempY;

    // Ghi lại thay đổi vào mảng Java
    env->ReleaseByteArrayElements(inputYUV, reinterpret_cast<jbyte *>(yuv), 0);
}
//sharpen
#include <jni.h>
#include <cstring>

// Hàm sharpen ảnh YUV420
extern "C"
JNIEXPORT void JNICALL
Java_com_example_yourapp_YUVProcessor_sharpenYUV(JNIEnv *env, jobject thiz, jbyteArray inputYUV, 
                                                 jint width, jint height) {
    int frameSize = width * height;         // Kích thước phần Y
    jbyte *yuv = env->GetByteArrayElements(inputYUV, nullptr);

    // Bộ nhớ tạm để lưu phần Y đã xử lý
    unsigned char *tempY = new unsigned char[frameSize];

    // Kernel sharpen 3x3
    int kernel[3][3] = {
        { 0, -1,  0 },
        { -1,  5, -1 },
        { 0, -1,  0 }
    };

    // Áp dụng kernel cho phần Y
    for (int y = 1; y < height - 1; y++) {
        for (int x = 1; x < width - 1; x++) {
            int sum = 0;

            // Duyệt qua kernel 3x3
            for (int ky = -1; ky <= 1; ky++) {
                for (int kx = -1; kx <= 1; kx++) {
                    int ny = y + ky;
                    int nx = x + kx;

                    sum += yuv[ny * width + nx] * kernel[ky + 1][kx + 1];
                }
            }

            // Giới hạn giá trị pixel từ 0 đến 255
            sum = sum < 0 ? 0 : (sum > 255 ? 255 : sum);

            // Gán pixel đã xử lý vào bộ nhớ tạm
            tempY[y * width + x] = static_cast<unsigned char>(sum);
        }
    }

    // Copy phần Y đã xử lý trở lại mảng YUV
    memcpy(yuv, tempY, frameSize);

    // Giữ nguyên phần UV
    // Không cần làm gì vì UV không thay đổi

    // Giải phóng bộ nhớ tạm
    delete[] tempY;

    // Ghi lại thay đổi vào mảng Java
    env->ReleaseByteArrayElements(inputYUV, reinterpret_cast<jbyte *>(yuv), 0);
}
//add index
opencv
Editor is loading...
Leave a Comment