OpenCV에서 RGB를 흑백으로 변환
RGB 이미지를 흑백 (바이너리) 이미지로 변환하는 방법을 알고 싶습니다.
변환 후 수정 된 이미지를 디스크에 어떻게 저장할 수 있습니까?
AFAIK, 그레이 스케일로 변환 한 다음 바이너리로 임계 값을 지정해야합니다.
1. 이미지를 그레이 스케일 이미지로 읽기 디스크에서 RGB 이미지를 읽는 경우 다음과 같이 그레이 스케일 이미지로 직접 읽을 수 있습니다.
// C
IplImage* im_gray = cvLoadImage("image.jpg",CV_LOAD_IMAGE_GRAYSCALE);
// C++ (OpenCV 2.0)
Mat im_gray = imread("image.jpg",CV_LOAD_IMAGE_GRAYSCALE);
2. RGB 이미지 im_rgb
를 그레이 스케일 이미지 로 변환 : 그렇지 않으면 이전에 얻은 RGB 이미지를 그레이 스케일 이미지로 변환해야합니다.
// C
IplImage *im_rgb = cvLoadImage("image.jpg");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);
// C++
Mat im_rgb = imread("image.jpg");
Mat im_gray;
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);
3. 변환은 바이너리 당신이 사용할 수있는 적응 임계 또는 고정 수준의 임계 값을 이진 영상에 그레이 스케일 이미지를 변환 할 수 있습니다.
예를 들어 C에서는 다음을 수행 할 수 있습니다 (C ++에서도 Mat 및 해당 함수를 사용하여 동일하게 수행 할 수 있음).
// C
IplImage* im_bw = cvCreateImage(cvGetSize(im_gray),IPL_DEPTH_8U,1);
cvThreshold(im_gray, im_bw, 128, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
// C++
Mat img_bw = im_gray > 128;
위의 예에서 128은 임계 값입니다.
4. 디스크에 저장
// C
cvSaveImage("image_bw.jpg",img_bw);
// C++
imwrite("image_bw.jpg", img_bw);
이것은 나를 위해 일한 것 같았습니다!
Mat a_image = imread(argv[1]);
cvtColor(a_image, a_image, CV_BGR2GRAY);
GaussianBlur(a_image, a_image, Size(7,7), 1.5, 1.5);
threshold(a_image, a_image, 100, 255, CV_THRESH_BINARY);
내 블로그 게시물 중 하나에서 비슷한 작업을합니다 . 간단한 C ++ 예제가 표시됩니다.
목표는 마이크로 어레이 슬라이드에 인쇄 된 스폿 샘플을 감지하기 위해 오픈 소스 cvBlobsLib 라이브러리 를 사용하는 것이었지만,이를 달성하려면 앞서 언급했듯이 이미지를 컬러-> 회색조-> 검정 + 흰색으로 변환해야합니다.
이미지를 "이진화"하는 간단한 방법은 임계 값과 비교하는 것입니다. 예를 들어 행렬의 모든 요소를 C ++의 opencv를 사용하여 값과 비교할 수 있습니다.
cv::Mat img = cv::imread("image.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat bw = img > 128;
In this way, all pixels in the matrix greater than 128 now are white, and these less than 128 or equals will be black
Optionally, and for me gave good results is to apply blur
cv::blur( bw, bw, cv::Size(3,3) );
Later you can save it as said before with:
cv::imwrite("image_bw.jpg", bw);
Simple binary threshold method is sufficient.
include
#include <string>
#include "opencv/highgui.h"
#include "opencv2/imgproc/imgproc.hpp"
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("./img.jpg",0);//loading gray scale image
threshold(img, img, 128, 255, CV_THRESH_BINARY);//threshold binary, you can change threshold 128 to your convenient threshold
imwrite("./black-white.jpg",img);
return 0;
}
You can use GaussianBlur
to get a smooth black and white image.
참고URL : https://stackoverflow.com/questions/1585535/convert-rgb-to-black-white-in-opencv
'program tip' 카테고리의 다른 글
Visual Studio : 참조 된 DLL 디버깅, 다른 SLN에 소스가 있습니다. (0) | 2020.11.21 |
---|---|
Webpack-dev-server는 파일을 컴파일하지만 브라우저에서 컴파일 된 자바 스크립트를 새로 고치거나 사용할 수 있도록하지 않습니다. (0) | 2020.11.21 |
라디오 버튼 "Checked"속성이 작동하지 않음 (0) | 2020.11.20 |
list.files ()와 같이 디렉토리 내의 디렉토리 목록을 얻는 방법 대신 "list.dirs ()" (0) | 2020.11.20 |
Eclipse의 프록시 설정을 사용하지 않는 Maven 플러그인 (0) | 2020.11.20 |