すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

アルファチャンネル付カラー画像で収縮したい

void erode_color(const cv::Mat& src, cv::Mat& dst, int iterations = 1){
    cv::Mat mask(src.rows, src.cols, CV_8UC1);
    cv::Mat element = cv::Mat::ones(3, 3, CV_8UC1);
    for(int i=0; i<mask.rows; i++){
        for(int j=0; j<mask.cols; j++){
            if(src.at<cv::Vec4b>(i, j)[3] == 0 || i == 0 || j == 0 || i == src.rows - 1 || j == src.cols - 1){
                mask.at<uchar>(i, j) = 0;
            }else{
                mask.at<uchar>(i, j) = 255;
            }
        }
    }
    cv::erode(mask, mask, element, cv::Point(-1, -1), iterations);
    dst = src.clone();
    for(int i=0; i<dst.rows; i++){
        for(int j=0; j<dst.cols; j++){
            if(mask.at<uchar>(i, j) == 0){
                dst.at<cv::Vec4b>(i, j)[3] = 0;
            }else{
                dst.at<cv::Vec4b>(i, j)[3] = 255;
            }
        }
    }
}