검색결과 리스트
OpenCV/이미지 처리에 해당되는 글 7건
- 2013.09.02 컬러 감축
- 2013.05.21 이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold()
- 2013.05.21 이미지 반전
- 2013.05.21 이미지 뒤집기_flip()
- 2013.05.20 이미지 크기 조정_resize()
- 2013.05.20 컬러공간 변환_cvtColor()
- 2013.05.20 단색 채우기
글
컬러 감축
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
// .ptr와 [] 사용하기(.at보다 빠름)
void colorReduce(Mat &image, int div=64) {
int nl= image.rows; // 행 개수
int nc= image.cols * image.channels(); // 각 행에 있는 원소의 총 개수
for (int j=0; j<nl; j++) {
uchar* data= image.ptr<uchar>(j);
for (int i=0; i<nc; i++) {
data[i]= data[i]/div*div + div/2;
}
}
}
void main()
{
Mat image;
int64 t, tinit;
image= imread("image.jpg");
if (!image.data) {
cerr<<"Error: 이미지 파일을 읽을 수 없습니다!!"<<endl;
exit(1);
}
imshow("original", image);
tinit = getTickCount();
colorReduce(image);
t = getTickCount() - tinit;
cout << "using .ptr and [] =" << 1000.*t/getTickFrequency() << "ms" << endl;
imshow("color reduce", image);
waitKey(0);
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
설정
트랙백
댓글
글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold()
이미지 이진화
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat gray_img = imread("lena.tif", 0);
if (!gray_img.data) return -1;
// 고정 임계 값 처리
Mat bin_img, bininv_img, trunc_img, tozero_img, tozeroinv_img;
// 입력 이미지 출력 이미지, 임계 값, maxVal, 임계 값 처리 방법
threshold(gray_img, bin_img, 0, 255, THRESH_BINARY | THRESH_OTSU);
threshold(gray_img, bininv_img, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
threshold(gray_img, trunc_img, 0, 255, THRESH_TRUNC | THRESH_OTSU);
threshold(gray_img, tozero_img, 0, 255, THRESH_TOZERO | THRESH_OTSU);
threshold(gray_img, tozeroinv_img, 0, 255, THRESH_TOZERO_INV | THRESH_OTSU);
// 적응적인 임계 값 처리
Mat adaptive_img;
// 입력 이미지 출력 이미지 maxVal, 임계 값 결정 방법, 임계 값 처리 방법, blockSize, C
adaptiveThreshold (gray_img, adaptive_img, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 7, 8);
// 결과 이미지보기
namedWindow("Binary",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("Binary Inv",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("Trunc",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("ToZero",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("ToZero Inv",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("Adaptive",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow("Binary",bin_img);
imshow("Binary Inv",bininv_img);
imshow("Trunc",trunc_img);
imshow("ToZero",tozero_img);
imshow("ToZero Inv",tozeroinv_img);
imshow("Adaptive",adaptive_img);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
컬러 감축 (0) | 2013.09.02 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
설정
트랙백
댓글
글
이미지 반전
이미지 반전
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
Mat src_img = imread("lena.tif", 1);
if (!src_img.data) return -1;
// NOT 연산
Mat dst_img = ~src_img;
namedWindow("src image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("dst image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow("src image",src_img);
imshow("dst image",dst_img);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
컬러 감축 (0) | 2013.09.02 |
---|---|
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
설정
트랙백
댓글
글
이미지 뒤집기_flip()
이미지 뒤집기
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat src_img = imread("lena.tif", 1);
if (!src_img.data) return -1;
Mat dst_img1;
Mat dst_img2(src_img.rows * 0.5, src_img.cols * 2.0, src_img.type ());
Mat v_img, h_img, b_img;
flip(src_img, v_img, 0); // 수평으로 반전 (수직 반전)
flip(src_img, h_img, 1); // 수직으로 반전 (수평 반전)
flip(src_img, b_img, -1); // 두 축으로 반전 (수직 반전 + 수평 반전)
namedWindow("vertical flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("horizontal flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("both flip image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow("vertical flip image",v_img);
imshow("horizontal flip image",h_img);
imshow("both flip image",b_img);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
단색 채우기 (0) | 2013.05.20 |
설정
트랙백
댓글
글
이미지 크기 조정_resize()
이미지 크기 조정
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat src_img = imread("lena.tif", 1);
if (!src_img.data) return -1;
Mat dst_img1;
Mat dst_img2(src_img.rows * 0.5, src_img.cols * 2.0, src_img.type ());
// INTER_LINER (이중 선형 보간)의 크기 변경
resize (src_img, dst_img1, cv :: Size (), 0.5, 0.5);
// INTER_CUBIC (바이 큐빅 보간)의 크기 변경
resize (src_img, dst_img2, dst_img2.size(), INTER_CUBIC);
namedWindow ( "resize image1",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow ( "resize image2",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow ( "resize image1",dst_img1);
imshow ( "resize image2",dst_img2);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |
단색 채우기 (0) | 2013.05.20 |
설정
트랙백
댓글
글
컬러공간 변환_cvtColor()
컬러공간 변환
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
Mat bgr_img = imread ( "lena.tif", 1);
if (!bgr_img.data) return -1;
Mat dst_img;
// BGR -> HSV
cvtColor (bgr_img, dst_img, CV_BGR2HSV);
imshow("BGR -> HSV",dst_img);
// BGR -> Lab
cvtColor (bgr_img, dst_img, CV_BGR2Lab);
imshow("BGR -> Lab",dst_img);
// BGR -> YCrCb
cvtColor (bgr_img, dst_img, CV_BGR2YCrCb);
imshow("BGR -> YCrCb",dst_img);
// BGR -> XYZ
cvtColor(bgr_img, dst_img, CV_BGR2XYZ);
imshow("BGR -> XYZ",dst_img);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
단색 채우기 (0) | 2013.05.20 |
설정
트랙백
댓글
글
단색 채우기
색칠
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main()
{
// 초기화시에 칠
Mat red_img(Size(640, 480), CV_8UC3, Scalar(0,0,255));
Mat white_img(Size(640, 480), CV_8UC3, Scalar::all(255));
Mat black_img = Mat::zeros(Size (640, 480), CV_8UC3);
// 초기화 후 채우기
Mat green_img = red_img.clone();
green_img = Scalar(0,255,0);
namedWindow("red image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("white image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("black image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
namedWindow("green image",CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
imshow("red image",red_img);
imshow("white image",white_img);
imshow("black image",black_img);
imshow("green image",green_img);
waitKey(0);
return 0;
}
'OpenCV > 이미지 처리' 카테고리의 다른 글
이미지 이진화(binary)_threshold(), 적응적 이진화adaptiveThreshold() (0) | 2013.05.21 |
---|---|
이미지 반전 (0) | 2013.05.21 |
이미지 뒤집기_flip() (0) | 2013.05.21 |
이미지 크기 조정_resize() (0) | 2013.05.20 |
컬러공간 변환_cvtColor() (0) | 2013.05.20 |